我正在查看instance_variable_set的文档,并看到给出的示例代码是这样做的:
obj.instance_variable_set(:@instnc_var, "value for the instance variable")
然后允许您在任何类的实例方法中以 @instnc_var 的形式访问变量。
我想知道为什么:
在@instnc_var
. 结肠有什么作用?
我正在查看instance_variable_set的文档,并看到给出的示例代码是这样做的:
obj.instance_variable_set(:@instnc_var, "value for the instance variable")
然后允许您在任何类的实例方法中以 @instnc_var 的形式访问变量。
我想知道为什么:
在@instnc_var
. 结肠有什么作用?
我的第一直觉是告诉你不要使用instance_variable_set
,除非你真的知道你在用它做什么。它本质上是一种用于元编程或绕过实例变量可见性的黑客工具。
也就是说,如果该变量没有设置器,则可以使用无论如何instance_variable_set
设置它。如果您控制代码只创建一个设置器,那就更好了。
尝试查看绝大多数实例变量设置需求的访问器。它们是一种惯用的方式,可以“免费”为您的实例变量获取 getter 和 setter,而无需编写这些函数。
如果您确实需要 instance_variable_set,它允许第一个参数是一个符号,它是要设置的实例变量的名称。冒号是 Ruby 语言的一部分,类似于“符号文字”:当您输入 时:foo
,您创建了一个值为 foo 的符号,就像您"bar"
直接在代码中输入时,您创建了一个值为“bar”的字符串文字”。