3

使用 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>'
4

3 回答 3

3

eval只是有自己的范围。您可以访问之前定义的变量,但无法访问内部定义的变量eval

在范围方面,您的示例类似于:

var = "a value"

1.times do # create new scope
  new_var = var
end

new_var
# NameError: undefined local variable or method `new_var' for main:Object
于 2013-06-18T14:59:46.263 回答
3

eval 创建自己的范围:

>> i = 1; local_variables.count
=> 2
>> eval "j = 1; local_variables.count"
=> 3
>> local_variables.count
=> 2
于 2013-06-18T15:02:18.207 回答
2

进行如下内省:

var = "a value"
eval "var_new = var,defined?(var_new)" #=> ["a value", "local-variable"]
defined?(var_new) #=>nil
defined?(var) #=>"local-variable"
defined?(temp) #=>nil

您可以看到var_new仅在eval. eval 在tempvar_new之外,两者都是相同的。

于 2013-06-18T15:02:00.917 回答