ruby - usar - recomendaciones navegacion segura
Operador de navegación segura(&.) Para nil (2)
A medida que Ruby 2.3 introduce el operador de navegación segura ( &. ), También conocido como operador solitario, el comportamiento en el objeto nil parece extraño.
nil.nil? # => true
nil&.nil? # => nil
¿Está diseñado para comportarse de esta manera? ¿O algún caso de borde que se escapó al agregar el operador solitario?
Esto es porque nil&.nil? es taquigrafía para nil && nil.nil? . Esto evaluaría a nil && true , que entonces es nil .
(nil && x).nil? Siempre se evalúa como true , para cualquier valor de x .
Si bien la sintaxis tiene poder, este caso específico tiene cierto potencial para convertirse en un ''gotcha'' para un desarrollador:
(stuff&.things).nil? => Esto produce true si las cosas no existen o stuff.things devuelve nil .
vs. el caso siguiente:
stuff&.things&.nil? => Esto produce nil en todos los casos, excepto en el caso en que stuff.things devuelve algo distinto de nil , en cuyo caso devolvería false .
Debido a la dificultad en la lógica booleana normal de diferenciar entre false y nil , es poco probable que esto tenga sentido en la lógica normal.
foo&.bar es la abreviatura de foo && foo.bar , entonces, ¿qué esperaría del resultado de la expresión nil && nil.nil? ¿ser?