2013-03-30 13 views
7

dalla console rotaie:come e quando sono variabili di Ruby istanziati

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 

la mia domanda è, perché il non variabile kol ottenere un'istanza di nil anche se la condizione (1 == 2) fallisce?

+0

'irb' funziona in modo diverso rispetto alle variabili locali rispetto all'interprete - attenzione. – Linuxios

risposta

7

Ha a che fare con il modo in cui l'interprete Ruby legge il codice.

L'assegnazione alla variabile non deve essere eseguita; l'interprete Ruby deve solo aver visto che la variabile esiste sul lato sinistro di un compito. (Programmazione 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 interprete crea la variabile anche se la cessione non viene effettivamente eseguita." http://www.jacopretorius.net/2012/01/block-variable-scope-in-ruby.html

Problemi correlati