我意识到您可以使用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!!!
有解决方法吗?
答案 0 :(得分:1)
你可以这样解决:
class Foo
def enum &block
Enumerator.new do |*args|
instance_exec *args, &block
end
end
end
但我相信你无法改变现有Proc
短instance_eval
/ instance_exec
的约束力。