如何使用instance_variable_set正确设置实例变量?

时间:2012-09-20 02:16:33

标签: ruby-on-rails ruby

我正在查看instance_variable_set的文档,并看到给出的示例代码执行此操作:

obj.instance_variable_set(:@instnc_var, "value for the instance variable")

然后允许您在任何类的实例方法中以@instnc_var访问变量。

我想知道为什么在:之前需要冒号@instnc_var。结肠做了什么?

1 个答案:

答案 0 :(得分:8)

我的第一直觉是告诉你不要使用instance_variable_set,除非你真的知道你使用它的是什么。它本质上是元编程的工具,或者是绕过实例变量可见性的黑客。

也就是说,如果该变量没有setter,您可以使用instance_variable_set将其设置为 。如果你控制代码只是创建一个setter,那就更好了。

尝试查看accessors,了解绝大多数实例变量的设置需求。它们是一种习惯性的方法,可以“免费”获取实例变量的getter和setter,而无需编写这些函数。

如果确实需要instance_variable_set,它允许第一个参数为symbol,它是要设置的实例变量的名称。冒号是Ruby语言的一部分,就像“符号文字”一样:当您键入:foo时,您创建了一个值为foo的符号,就像您在代码中直接输入"bar"一样,您创建一个值为“bar”的字符串文字。