6

我正在查看instance_variable_set的文档,并看到给出的示例代码是这样做的:

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

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

我想知道为什么:@instnc_var. 结肠有什么作用?

4

1 回答 1

11

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

也就是说,如果该变量没有设置器,则可以使用无论如何instance_variable_set设置它。如果您控制代码只创建一个设置器,那就更好了。

尝试查看绝大多数实例变量设置需求的访问器。它们是一种惯用的方式,可以“免费”为您的实例变量获取 getter 和 setter,而无需编写这些函数。

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

于 2012-09-20T02:28:23.387 回答