Вопрос

Я заметил различия между хеш-объектом в Ruby 1.8.7 и хеш-объектом в Rails 3.0.10.

Например, в версии 1.8.7 irb, Я получил:

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

Однако из консоли рельсов 3.0.10 я получаю:

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

Это меня удивляет, потому что у меня сложилось впечатление, что try определяется в Object, который является предком Hash и try вернет ноль вместо выдачи NoMethodError.

Что мне не хватает?

Это было полезно?

Решение

Это меня удивляет, потому что у меня сложилось впечатление, что try определяется в Object который является предком Hash и try вернется nil вместо того, чтобы бросить NoMethodError.

Что мне не хватает?

Ваше впечатление о котором сорт try определено правильно (Object).Чего вам не хватает, так это того, что файл оно определено в.Он определен в библиотеке ActiveSupport, а не в базовой библиотеке Ruby.

Итак, вам нужно

require 'active_support/core_ext/object/try'

первый.

Другие советы

try не является частью Ruby 1.8.7, хотя Rails включает его через ActiveSupport. try часть Object из рубина 1.9+ (афаик).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top