未计算行的Ruby变量赋值

未计算行的Ruby变量赋值,ruby,Ruby,最近我发现在Ruby中,一个未计算的行仍然将nil赋值给变量 2.3.4 (main):0 > defined? this_never_seen_variable_before => nil 2.3.4 (main):0 > this_never_seen_variable_before = "value" if false => nil 2.3.4 (main):0 > defined? this_never_seen_variable_before =>

最近我发现在Ruby中,一个未计算的行仍然将
nil
赋值给变量

2.3.4 (main):0 > defined? this_never_seen_variable_before
=> nil
2.3.4 (main):0 > this_never_seen_variable_before = "value" if false
=> nil
2.3.4 (main):0 > defined? this_never_seen_variable_before
=> "local-variable"
2.3.4 (main):0 >
2.3.4 (main):0 > this_never_seen_variable_before_2
   NameError: undefined local variable or method `this_never_seen_variable_before_2' for main:Object
from (pry):119:in `<main>'
2.3.4 (main):0 > this_never_seen_variable_before_2 = "value" if false
=> nil
2.3.4 (main):0 > this_never_seen_variable_before_2
=> nil
2.3.4 (main):0 >
2.3.4(主):0>已定义?这是你以前从未见过的变量
=>零
2.3.4(main):0>如果为false,则此变量之前从未见过
=>零
2.3.4(主):0>定义?这是你以前从未见过的变量
=>“局部变量”
2.3.4(主要):0>
2.3.4(主):0>此变量在变量2之前从未出现过
NameError:未定义的局部变量或main:Object的方法“this\u从未\u见过\u variable\u在\u 2之前”
from(pry):119:in`'
2.3.4(main):0>此变量在\u 2=“value”之前从未出现过,如果为false
=>零
2.3.4(主):0>此变量在变量2之前从未出现过
=>零
2.3.4(主要):0>

有人想知道更多关于它的信息吗?

在运行Ruby代码之前,必须首先对其进行解析,而您所经历的行为正是在这个阶段产生的

当解析器扫描代码时,每当遇到声明(
foo='something'
)时,它就会通过将其值设置为
nil
来为该变量分配空间。该变量声明是否在代码上下文中实际执行与此无关。例如:

if false
  foo = 42
end

p foo
#=> nil
在上面的代码中,从未声明过逻辑
foo
,但是在解析代码时,Ruby会识别并分配内存中的空间

希望这有帮助