开发者

Get the subject of a binding in Ruby 1.8.6

In Ruby 1.8.7 I can do the following in order to get the subject of a binding 开发者_Go百科object:

binding.eval("self")

However, in Ruby 1.8.6, the eval method is private, so I expose it like this:

class Binding
  public :eval
end

Which seems to work fine, however, binding.eval("self") returns the binding itself, not the subject of binding.

How can I get the subject of a binding in Ruby 1.8.6? The solution doesn't need to pretty - it just needs to work until we can upgrade to 1.8.7.


I'll bet at least a nickel eval('self', abinding) will work:

#!/usr/bin/ruby1.8

class Foo

  def foo
    binding
  end

end

p eval('self', Foo.new.foo)    # => #<Foo:0xb7bfe5ac>

This works because if you pass a binding to eval, it evaluates the string in the context of that binding. self in the context of the binding is whatever self was when the binding was created.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜