在Ruby 1.8.7中,我可以执行以下操作以获取绑定对象的主题:
binding.eval("self")
但是,在Ruby 1.8.6中,eval方法是私有的,所以我将它暴露出来:
class Binding
public :eval
end
这似乎工作正常,但是,binding.eval("self")
返回绑定本身,而不是绑定的主题。
如何在Ruby 1.8.6中获得绑定主题?解决方案不需要很好 - 它只需要工作,直到我们可以升级到1.8.7。
答案 0 :(得分:1)
我敢打赌至少镍eval('self', abinding)
会起作用:
#!/usr/bin/ruby1.8
class Foo
def foo
binding
end
end
p eval('self', Foo.new.foo) # => #<Foo:0xb7bfe5ac>
这是有效的,因为如果将绑定传递给eval,它会在该绑定的上下文中计算字符串。绑定上下文中的self
是创建绑定时的self
。