Hash no contiene el método 'try'
-
09-12-2019 - |
Pregunta
Estoy notando diferencias entre un objeto hash dentro de Ruby 1.8.7 y un objeto hash dentro de Rails 3.0.10.
Por ejemplo, dentro de la versión 1.8.7 irb
, Yo obtengo:
1.8.7 :001 > {}.try(:method)
NoMethodError: undefned method `try' for {}:Hash
from (irb):1```
Sin embargo, desde la consola de Rails 3.0.10, obtengo:
1.8.7 :003 > {}.try(:method_x)
NoMethodError: undefined method `method_x' for {}:Hash
from (irb):3:in `try'
from (irb):3
Esto me sorprende porque tenía la impresión de que try
se define en Object, que es un antepasado de Hash y try
devolverá nil en lugar de arrojar un NoMethodError.
¿Qué me estoy perdiendo?
Solución
Esto me sorprende porque tenía la impresión de que
try
se define enObject
que es un antepasado deHash
ytry
regresaránil
en lugar de tirar unNoMethodError
.¿Qué me estoy perdiendo?
Tu impresión de cuál clase try
está definido en es correcto (Object
).Lo que te falta es lo que archivo está definido en.Está definido en la biblioteca ActiveSupport, no en la biblioteca principal de Ruby.
Entonces, necesitas
require 'active_support/core_ext/object/try'
primero.
Otros consejos
try
no es parte de Ruby 1.8.7, aunque Rails lo incluye a través de ActiveSupport
. try
es parte de Object
de Ruby 1.9+ (que yo sepa).