2017-12-04 1 views
3

最近、私はRubyの評価されていない行がまだ変数にnilを割り当てていることを知りました。評価されていない行に対するRubyの変数の割り当て

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

Rubyコードを実行する前に、まず解析する必要があります。この段階では、発生している動作が発生しています。

パーサーがコードをスキャンするときに、宣言(foo = 'something')が検出されるたびに、値をnilに設定してその変数の領域を割り当てます。変数宣言が実際にコードのコンテキストで実行されるかどうかは関係ありません。例:上記のコードのロジックfoo

if false 
    foo = 42 
end 

p foo 
#=> nil 

宣言されることはありません、しかし、それはコードが出て解析されたときに認識やRubyでのために割り当てられたメモリ内のスペースです。

希望すると便利です。

関連する問題