2015-09-29 21 views

risposta

2

Le variabili locali sono definite (come nil) nel punto in cui vengono analizzate. Definizione di var2 precede la condizione. Ciò rende var2 definito anche se il compito non viene eseguito. Quindi, la condizione valuta che è definito var2, che mantiene il valore nil per var2.

10

Questo è uno degli unici momenti in Ruby che definirei WTF effettivi.

devi usare

unless defined? var 
    var = :value 
end 

Con la sintassi postfix, l'interprete sarà internamente nil -ify il valore in modo che possa ragionare sulla variabile, rendendo così definito prima che il controllo viene eseguito:

# Doesn't print anything 
unless defined?(foo) and (p(foo) or true) 
    foo = :value 
end 

# Prints nil 
bar = :value unless defined?(bar) and (p(bar) or true)