Question

Je remarque des différences entre un objet de hachage dans Ruby 1.8.7 et un objet de hachage dans Rails 3.0.10.

Par exemple, dans la version 1.8.7 irb, Je reçois:

1.8.7 :001 > {}.try(:method)
NoMethodError: undefned method `try' for {}:Hash
from (irb):1```

Cependant, depuis la console des rails 3.0.10, j'obtiens :

1.8.7 :003 > {}.try(:method_x)
NoMethodError: undefined method `method_x' for {}:Hash
  from (irb):3:in `try'
  from (irb):3

Cela me surprend car j'avais l'impression que try est défini dans Object qui est un ancêtre de Hash et try renverra zéro au lieu de lancer une NoMethodError.

Qu'est-ce que je rate?

Était-ce utile?

La solution

Cela me surprend car j'avais l'impression que try est défini dans Object qui est un ancêtre de Hash et try reviendra nil au lieu de lancer un NoMethodError.

Qu'est-ce que je rate?

Votre impression de laquelle classe try est défini dans est correct (Object).Ce qui te manque, c'est quoi déposer il est défini dans.Il est défini dans la bibliothèque ActiveSupport, pas dans la bibliothèque principale Ruby.

Donc, tu dois

require 'active_support/core_ext/object/try'

d'abord.

Autres conseils

try ne fait pas partie de Ruby 1.8.7, mais les rails l'incluent via ActiveSupport.try fait partie de Object de Ruby 1.9+ (Afaik).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top