【发布时间】:2012-07-20 21:17:38
【问题描述】:
我意识到您可以使用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!!!
有没有办法解决这个问题?
【问题讨论】:
-
我很确定你不能在 1.8 或 1.9 中这样做。 Rubinius 肯定有办法,但不是标准的Ruby。至少不是没有任何 C 代码。