Pergunta

Estou notando diferenças entre um objeto hash no Ruby 1.8.7 e um objeto hash no Rails 3.0.10.

Por exemplo, dentro do 1.8.7 irb, Eu recebo:

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

No entanto, no console Rails 3.0.10, recebo:

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

Isto surpreende-me porque tive a impressão de que try é definido em Object que é um ancestral de Hash e try retornará nulo em vez de lançar um NoMethodError.

o que estou perdendo?

Foi útil?

Solução

Isto surpreende-me porque tive a impressão de que try é definido em Object que é um ancestral de Hash e try retornará nil em vez de lançar um NoMethodError.

o que estou perdendo?

Sua impressão sobre qual aula try está definido em está correto (Object).O que você está perdendo é o que arquivo está definido em.Está definido na biblioteca ActiveSupport, não na biblioteca principal do Ruby.

Então, você precisa

require 'active_support/core_ext/object/try'

primeiro.

Outras dicas

try não faz parte do Ruby 1.8.7, embora o Rails o inclua através ActiveSupport. try é parte de Object do rubi 1.9+ (afaik).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top