Ruby 在没有Eval的情况下更改块绑定?
我意识到您可以使用Ruby 在没有Eval的情况下更改块绑定?,ruby,binding,proc,Ruby,Binding,Proc,我意识到您可以使用instance\u 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
instance\u 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!!!
有办法解决这个问题吗?你可以这样解决:
class Foo
def enum &block
Enumerator.new do |*args|
instance_exec *args, &block
end
end
end
但是我相信,除了
实例评估
/实例执行
,您无法更改现有过程的绑定。我非常确定您在1.8或1.9中都无法做到这一点。Rubinius肯定有办法,但不是标准的Ruby。至少没有任何C代码。