instância_eval e rendimento

Excelente exemplo de http://stackoverflow.com/questions/1425055/is-yield-self-the-same-as-instance-eval

class Foo
def initialize(&block)
instance_eval
(&block) if block_given?
end
end
x
= Foo.new { def foo; 'foo'; end } #=> #<Foo:0xb800f6a0>
x
.foo #=> "foo"
z
= Foo.new #=> #<Foo:0xb800806c>
z
.foo #=>NoMethodError: undefined method `foo' for #<Foo:0xb800806c>
class Foo2
def initialize
yield if block_given?
end
end
x
= Foo2.new { def foo; 'foo'; end } #=> #<Foo:0xb7ff1bb4>
x
.foo #=> private method `foo' called for #<Foo2:0xb8004930> (NoMethodError)
x
.send :foo => "foo"
z
= Foo.new #=> #<Foo:0xb800806c>
z
.send :foo => "foo"