を使用してブロックのバインディングを変更できることを認識していますinstance_eval
class Foo
def bar &block
instance_eval &block
end
end
Foo.new.bar { self } # returns the instance
ただし、一部の組み込みメソッドはブロックを受け入れます。その場合、組み込みメソッドの内部をいじらずにブロックのバインディングを変更することはできないようです。
class Foo
def enum &block
Enumerator.new &block
end
end
Foo.new.enum { self }.each {} # returns main!!!
これを回避する方法はありますか?