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?

¿Fue útil?

Solución

Esto me sorprende porque tenía la impresión de que try se define en Object que es un antepasado de Hash y try regresará nil en lugar de tirar un NoMethodError.

¿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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top