2013-03-30 12 views
7

von Schienen Konsole:, wie und wann wird Variablen Ruby-instanziiert

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 

meine Frage ist, warum die nicht Variable kol zu nil instanziiert erhalten, auch wenn die Bedingung (1 == 2) ausfällt?

+0

'irb' arbeitet in Bezug auf lokale Variablen anders als der Interpreter - Vorsicht. – Linuxios

Antwort

7

Es hat damit zu tun, wie der Ruby-Interpreter den Code liest.

Die Zuweisung an die Variable muss nicht ausgeführt werden; Der Ruby-Interpreter muss lediglich gesehen haben, dass die Variable auf der linken Seite einer Zuweisung existiert. (Programming Rubin 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-Interpreter erzeugt das Variable, obwohl die Zuweisung nicht tatsächlich ausgeführt." http://www.jacopretorius.net/2012/01/block-variable-scope-in-ruby.html

Verwandte Themen