在Ruby 1.8.6中获取绑定的主题

时间:2010-02-05 05:46:56

标签: ruby

在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。

1 个答案:

答案 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