首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BasicObject中的binding.pry

BasicObject中的binding.pry
EN

Stack Overflow用户
提问于 2013-04-15 05:51:32
回答 2查看 1.4K关注 0票数 8

对于调试BasicObject的子类来说,pry将是非常棒的!

https://github.com/pry/pry说,pry有:“外来对象支持(BasicObject实例...”

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

代码语言:javascript
复制
 NameError:
   undefined local variable or method `binding' for #<C30Course:0xbefbc0c>

当调用method_missing时,将绑定发送到哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-15 07:38:24

您需要直接调用Kernel上的binding方法,如下所示:

代码语言:javascript
复制
[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>
票数 11
EN

Stack Overflow用户

发布于 2013-04-15 07:14:02

因为从BasicObject继承会给你一个Blank Slate (所有的撬动实例方法也被删除了),所以你需要更多的手动操作。例如:

代码语言:javascript
复制
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

输出(打开的pry会话):

代码语言:javascript
复制
☺  ruby hack.rb                                                            ruby-2.0.0-p0

From: .../quick_hacking/hack.rb @ line 5 Test#test_method:

    3: def test_method
    4:   a = 1+1
 => 5:   ::Pry.send(:binding).pry
    6:   b = 2+2
    7: end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16004783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档