Ruby 绑定。撬入基本对象

Ruby 绑定。撬入基本对象,ruby,debugging,proxy-classes,pry,Ruby,Debugging,Proxy Classes,Pry,pry非常适合调试BasicObject的子类 普赖尔说: “外来对象支持(BasicObject实例…” 但如何做到这一点呢? 正如可以预料的那样,BasicObject不理解绑定 NameError: undefined local variable or method `binding' for #<C30Course:0xbefbc0c> name错误: 未定义的局部变量或方法“binding”# 调用method_missing时,向何处发送绑定?因为从Basi

pry非常适合调试BasicObject的子类

普赖尔说: “外来对象支持(BasicObject实例…”

但如何做到这一点呢? 正如可以预料的那样,BasicObject不理解绑定

 NameError:
   undefined local variable or method `binding' for #<C30Course:0xbefbc0c>
name错误:
未定义的局部变量或方法“binding”#

调用method_missing时,向何处发送绑定?

因为从BasicObject继承将给您一个
空白板(也删除了所有pry实例方法),所以您必须手动执行更多操作。例如:

require 'pry'
class Test < BasicObject
  def test_method
    a = 1+1
    ::Pry.send(:binding).pry
    b = 2+2
  end
end
o = Test.new
p o.test_method

您需要在
内核上直接调用
绑定
方法,如下所示:

[13] pry(main)> class O < BasicObject
              |   def hi
              |     x = 10
              |     ::Kernel.binding.pry
              |   end  
              | end  
=> nil
[14] pry(main)> O.new.hi

From: (pry) @ line 19 O#hi:

    17: def hi
    18:   x = 10
 => 19:   ::Kernel.binding.pry
    20: end

[1] pry(unknown)> x
=> 10
[2] pry(unknown)> self
=> #<O:0x3fd5310d04f8>
[13]撬(主)>O类零
[14] 撬(主)>O.new.hi
发自:(撬)第19行O#hi:
17:def hi
18:x=10
=>19:::Kernel.binding.pry
20:完
[1] 撬动(未知)>x
=> 10
[2] 撬动(未知)>自身
=> #

出于好奇,在内核上调用它有什么实际区别:
::Kernel.send(:binding.pry
vs
::pry.send(:binding).pry
Hmm,实际上不是这样,但是通过
pry
调用它似乎很奇怪,因为
pry
类对
绑定没有影响。相反,通过
内核
调用它似乎没有那么随意,因为
绑定
方法实际上是在那里定义的。您不必使用
发送,::Kernel.binding工作正常,因为它是一个模块函数。@banister这肯定比我的方法更干净、更清晰:)@Ernst听起来你又有了一块宝石,它正在与stdin/stdout混在一起。“当我使用Pry with Rails时,我没有这个问题。@Ernst banister的回答是一个更好更干净的方法。他的回答是正确的。巴尼斯特的回答是一个更好更干净的方法。他的答案是正确的。
[13] pry(main)> class O < BasicObject
              |   def hi
              |     x = 10
              |     ::Kernel.binding.pry
              |   end  
              | end  
=> nil
[14] pry(main)> O.new.hi

From: (pry) @ line 19 O#hi:

    17: def hi
    18:   x = 10
 => 19:   ::Kernel.binding.pry
    20: end

[1] pry(unknown)> x
=> 10
[2] pry(unknown)> self
=> #<O:0x3fd5310d04f8>