7

レールコンソールから:

development environment (Rails 3.2.9)
1.9.2p320 :001 > defined?(kol)
 => nil 
1.9.2p320 :002 > if 1==2
1.9.2p320 :003?>   kol = 'mess'
1.9.2p320 :004?>   end
 => nil 
1.9.2p320 :005 > defined?(kol)
 => "local-variable" 
1.9.2p320 :006 > kol
 => nil 

私の質問は、条件 (1==2) が失敗したにもかかわらず、変数kolがインスタンス化されるのはなぜですか?nil

4

1 に答える 1

7

これは、Ruby インタープリターがコードを読み取る方法に関係しています。

変数への代入は実行する必要はありません。Ruby インタープリターは、代入の左側に変数が存在することを確認するだけで済みます。(プログラミング Ruby 1.9 & 2.0)

a = "never used" if false
[99].each do |i|
  a = i # this sets the variable in the outer scope
end
a # => 99

「割り当てが実際に実行されなくても、Ruby インタープリターは変数を作成します。」http://www.jacopretorius.net/2012/01/block-variable-scope-in​​-ruby.html

于 2013-03-30T19:18:43.083 に答える