ruby - pagina - proyecto groovy
¿Ruby tiene sintaxis para un operador de navegación seguro de valores nulos, como en Groovy? (4)
En una aplicación de Rails hay Object#try
Para que puedas hacer
obj1.try(:obj2).try(:value)
o con un bloque (como se dice en los comentarios abajo)
obj.try {|obj| obj.value}
ACTUALIZAR
En ruby 2.3 hay operador para esto:
obj&.value&.foo
Que es lo mismo que obj && obj.value && obj.value.foo
En Groovy, hay una buena sintaxis para trabajar con valores nulos.
Por ejemplo, puedo hacer una sentencia if:
if (obj1?.obj2?.value) {
}
Esto no lanzará una NullPointerException incluso si obj1 es nulo (se evaluará como falso).
Esto es algo que es muy conveniente, por lo que me pregunto si hay un equivalente de Ruby que haya perdido.
Ruby 2.3 tendrá soporte para el operador de navegación segura:
obj1&.obj2&.value
https://www.ruby-lang.org/en/news/2015/11/11/ruby-2-3-0-preview1-released/
Esto se ha añadido a Ruby 2.3.
La sintaxis es obj1&.meth1&.meth2
.
try
era la única forma estándar de hacerlo antes de Ruby 2.3. Con Ruby 2.3 puedes hacer:
if obj1&.obj2&.value
end
Además, si tiene una estructura hash, puede usar _.
Operador con Hashie :
require ''hashie''
myhash = Hashie::Mash.new({foo: {bar: "blah" }})
myhash.foo.bar
=> "blah"
myhash.foo?
=> true
# use "underscore dot" for multi-level testing
myhash.foo_.bar?
=> true
myhash.foo_.huh_.what?
=> false