我正在查看 instance_variable_set 的文档并看到给出的示例代码是这样做的:
obj.instance_variable_set(:@instnc_var, "value for the instance variable")
然后允许您在类的任何实例方法中以@instnc_var 的形式访问该变量。
我想知道为什么在@instnc_var
之前需要一个冒号:
。冒号有什么作用?
最佳答案
我的第一直觉是告诉你不要使用 instance_variable_set
除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击。
也就是说,如果该变量没有 setter ,您可以使用 instance_variable_set
来设置它无论如何。如果您控制代码只创建一个 setter,那就更好了。
尝试查看 accessors满足绝大多数实例变量设置需求。它们是一种“免费”为您的实例变量提供 getter 和 setter 的惯用方法,您无需编写这些函数。
如果您确实需要 instance_variable_set,它允许第一个参数是 symbol这是要设置的实例变量的名称。冒号是 Ruby 语言的一部分,类似于“符号文字”:当您键入 :foo
时,您已经创建了一个值为 foo 的符号,就像您键入 "bar 时一样"
直接在您的代码中创建一个值为“bar”的字符串文字。
关于ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12505289/