mi aspettavo il seguente frammento:`definito` e `non unless` funziona come previsto
var = "Not Empty" unless defined? var
var # => nil
per tornare "Not Empty"
, ma ho avuto nil
. Qualche idea sul perché questo sta accadendo?
mi aspettavo il seguente frammento:`definito` e `non unless` funziona come previsto
var = "Not Empty" unless defined? var
var # => nil
per tornare "Not Empty"
, ma ho avuto nil
. Qualche idea sul perché questo sta accadendo?
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
.
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)