instance_variable_get将不接受有效的实例变量名称

时间:2013-10-23 22:30:22

标签: ruby instance-variables

@object0 = "bars"
@object1 = "foobs"

query0 = "@object" + "0"
puts instance_variable_get(query0) #=> bars

puts instance_variable_get(:@object1) #=> foobs

query1 = ":" + "@object" + "1"
puts instance_variable_get(query1) #=> ':@object1' is not allowed as an instance variable name!

问题绝对是冒号,尽管它是唯一可以在全局范围内引用实例变量的方法。我认为instance_variable_get方法对于它自己的好处太聪明了。反正是否强制它接受一个它视为无效的实例变量?有什么工作吗?起初我以为我可能会对我将一个简单的字符串传递给方法这一事实做了一些事情,但正如你所看到的,instance_variable_get的前两个用法完美地工作,并且它们使用字符串。

2 个答案:

答案 0 :(得分:2)

正如Some Guy已经指出的那样,实例变量必须以@开头,而不是:

query1 = "@object" + "1"
puts instance_variable_get(query1)

或(冗余地),

query1 = ("@object" + "1").to_sym
puts instance_variable_get(query1)

答案 1 :(得分:1)

:@ object1是一个符号。

“:”+“@ object”+“1”是一个字符串。

它告诉您,您不能拥有以“:”

开头的实例变量名称