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?