Le hachage ne contient pas la méthode « essayer »
-
09-12-2019 - |
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?
La solution
Cela me surprend car j'avais l'impression que
try
est défini dansObject
qui est un ancêtre deHash
ettry
reviendranil
au lieu de lancer unNoMethodError
.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).