0
@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 的前两个用法完美地工作,它们使用字符串。

4

2 回答 2

2

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

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

或(冗余),

query1 = ("@object" + "1").to_sym
puts instance_variable_get(query1)
于 2013-10-23T22:44:03.797 回答
1

:@object1 是一个符号。

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

它告诉你不能有一个以“:”开头的实例变量名

于 2013-10-23T22:40:21.410 回答