Questo perché nil&.nil?
è una scorciatoia per nil && nil.nil?
. Ciò valuterà a nil && true
, che è quindi nil
.
(nil && x).nil?
valuta sempre a true
, per qualsiasi valore di x
.
Mentre la sintassi ha il potere, questo caso specifico ha un certo potenziale per diventare un 'Gotcha' per uno sviluppatore:
(stuff&.things).nil?
=> Questo produce true
se roba non esiste, o stuff.things
rendimenti nil
.
contro il caso qui di seguito:
stuff&.things&.nil?
=> Questo produce nil
in tutti i casi, tranne il caso in cui stuff.things
restituisce qualcosa di diverso nil
, nel qual caso sarebbe tornato false
.
A causa della difficoltà nella normale logica booleana di differenziare tra false
e nil
, è improbabile che ciò abbia senso nella logica normale.
Non chiaro perché ti sembra strano. – sawa
Perché è meglio usare 'try' in Rails? – Jwan622
@ Jwan622 Penso che questo sia ispirato a 'try'. –