使用eval分配实例变量是有效的,而另一种方法不起作用。试图理解这里发生了什么。任何帮助都将不胜感激。
>> var = "a value"
=> "a value"
>> @v
=> nil
>> eval "@v = var"
=> "a value"
>> @v
=> "a value"
>> eval "var_new = var"
=> "a value"
>> var_new
NameError: undefined local variable or method `var_new' for main:Object
from (irb):7
from C:/Ruby193/bin/irb:12:in `<main>'
eval
创建一个新的作用域,而var_new
是该作用域的 局部变量。 - Sergio Tulentsev@v
是包含对象的实例变量(在irb
中,它是Object
的一个实例 - 至少在 1.8.7 中是这样),因此可以从 eval 访问,并且由于作用域限制在对象中,所以它会保留下来。 - Neil Slater