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