2013-03-30 28 views
7

從鐵軌控制檯:如何以及何時被Ruby的變量實例化

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 

我的問題是,爲什麼不變量kol實例化到nil即使條件(1 == 2)失敗?

+0

對於局部變量,「irb」的工作方式與解釋器不同 - 要小心。 – Linuxios

回答

7

它與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