代码之家  ›  专栏  ›  技术社区  ›  Joel

获取Ruby1.8.6中绑定的主题

  •  1
  • Joel  · 技术社区  · 16 年前

    在Ruby1.8.7中,为了获得绑定对象的主题,我可以执行以下操作:

    binding.eval("self")
    

    然而,在Ruby1.8.6中,eval方法是私有的,因此我将其公开如下:

    class Binding
      public :eval
    end
    

    不过,这似乎很管用, binding.eval("self") 返回绑定本身,而不是绑定的主题。

    如何在Ruby1.8.6中获得绑定的主题?解决方案不需要很漂亮-它只需要工作,直到我们可以升级到1.8.7。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Wayne Conrad    16 年前

    我敢打赌至少一分钱 eval('self', abinding) 将工作:

    #!/usr/bin/ruby1.8
    
    class Foo
    
      def foo
        binding
      end
    
    end
    
    p eval('self', Foo.new.foo)    # => #<Foo:0xb7bfe5ac>
    

    这是因为如果将绑定传递给eval,它将在该绑定的上下文中计算字符串。 self 在绑定的上下文中 自己 是在创建绑定时。

    推荐文章