在Ruby1.8.7中,为了获得绑定对象的主题,我可以执行以下操作:
binding.eval("self")
然而,在Ruby1.8.6中,eval方法是私有的,因此我将其公开如下:
class Binding public :eval end
不过,这似乎很管用, binding.eval("self") 返回绑定本身,而不是绑定的主题。
如何在Ruby1.8.6中获得绑定的主题?解决方案不需要很漂亮-它只需要工作,直到我们可以升级到1.8.7。
我敢打赌至少一分钱 eval('self', abinding) 将工作:
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
自己