Por que o segundo 'p arg' denunciar a instância Foo?
-
07-07-2019 - |
Pergunta
class Foo
def with_yield
yield(self)
end
def with_instance_eval(&block)
instance_eval(&block)
end
end
f = Foo.new
f.with_yield do |arg|
p self
# => main
p arg
# => #<Foo:0x100124b10>
end
f.with_instance_eval do |arg|
p self
# => #<Foo:0x100124b10>
p arg
# => #<Foo:0x100124b10>
end
Por que o segundo 'p arg
' denunciar a instância Foo? ele não deve relatar nil
desde with_instance_eval
não produz self
ao bloco?
Solução
Aparentemente, no Ruby 1.8 instance_eval não só mudam o valor da auto dentro do bloco para o seu receptor, ele também produz esse valor. Em 1.9 já não é este o caso (arg será nula lá), de modo que o comportamento não deve ser invocado (estou também bastante certeza de que está em situação irregular).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow