次のような例で、 class Foo def initialize(&block) instance_eval(&block) if block_given? end end x = Foo.new { def foo; 'foo'; end } p x.foo class Foo def initialize yield self if block_given? end end x = Foo.new { def foo; 'foo'; end } p x.foo え、後者はプライベートメソッド呼びだしエラーになるよ。yield で self を渡しているのに、ブロックで受けとっていないからだね。こうかなぁ class Foo def initialize yield self if block_given? end end x = Foo.new {|obj| def obj.foo(