In Ruby, un segno di uguale uguale viene utilizzato per l'assegnazione . L'espressione
data = session["devise.facebook_data"]
assegna il risultato della valutazione session["devise.facebook_data"]
a una variabile locale chiamata data
.
Se l'hash session
non dispone di una chiave "devise.facebook_data"
, tornerà nil
e data
verrà assegnato nil
. Le assegnazioni valutano il valore assegnato, quindi l'assegnazione verrà valutata anche su nil
. nil
è considerato falso in un contesto booleano, pertanto l'operando destro di &&
non verrà valutato. In questo modo, non riceverai un NoMethodError
cercando di chiamare nil["extra"]["raw_info"]
.
Se il session
hash fa avere una chiave "devise.facebook_data"
, data
sarà impostato il valore ad essa associato. Qualsiasi valore diverso da nil
e false
è considerato attendibile, pertanto verrà valutato l'operando di destra dell'operatore &&
.
Se la condizione è attendibile, verrà valutata la clausola then
, che utilizza la variabile data
assegnata nella condizione.
Nota: Credo che si potrebbe anche utilizzare la variabile data
all'interno del lato destro dell'operatore &&
, vale a dire la condizione potrebbe leggere in questo modo invece:
if data = session["devise.facebook_data"] && data["extra"]["raw_info"]
ma dovrò per controllare quello
fonte
2015-06-10 22:29:17
Grazie !! Ha senso ora, l'hai spiegato perfettamente. – thesowismine
Non sai cosa intendi per "cosa necessaria ... essere valido è un'espressione booleana". Qualsiasi oggetto può apparire dopo "if". C'è qualche oggetto "non-booleano" che hai in mente che renderebbe illegale una condizione "if"? – sawa
@sawa Quando sono vicino a una macchina posso rivedere quella parte. – Makoto