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

我正在查看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,那就好多了。

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

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