0

我知道 pry 允许您“cd”到其他范围。

pry(main)> cd Object
pry(Object)> ls
constants: 
  ARGF               Encoding          GC              NIL                  
  ArgumentError      EncodingError     Gem             NilClass             
  ARGV               Enumerable        Hash            Noexec               
  Array              Enumerator        IndexError      NoMemoryError        
...

但是有没有办法将交互式会话移动到传递给方法的块中?

pry(main)> cd some_instance.some_method do |some_argument|
pry(block)> ls
  some_argument        some_other_vars_available_within_block
pry(block)> end
  result_of_block
pry(main)>

如果可能的话,这将非常有帮助。我试过让 binding.pry 以这种方式自己工作,但没有运气,但我想确保在继续之前我走的是正确的道路。

4

2 回答 2

1

事实上,嵌套pry效果很好。向pry团队致敬。

一旦我解决了我的小 binding.pry 问题(完全是我的错)。

嵌套pry:( 注意exit需要的 2 个语句)

Hershwild:~ jstillwell$ pry
[1] pry(main)> binding.pry
[1] pry(main)> exit
=> nil
[2] pry(main)> exit
Hershwild:~ jstillwell$ 

从一个块pry内产生:

Hershwild:~ jstillwell$ pry
[1] pry(main)> def test
[1] pry(main)*   yield true
[1] pry(main)* end  
=> nil
[2] pry(main)> test do |inside|
[2] pry(main)*   binding.pry
[2] pry(main)* end  
# after that end statement, pry resumes inside the block
[1] pry(main)> inside
=> true
[2] pry(main)> exit
=> nil
[3] pry(main)> exit
Hershwild:~ jstillwell$ 
于 2013-03-08T01:00:31.900 回答
1

不确定我是否完全理解你,但你可以试试这个,例如:

(master ✘)✹✭ ᐅ pry
[1] pry(main)> def hello(&block)
             |   Object.new.instance_exec(&block)
             | end  
=> nil
[2] pry(main)> block_binding = nil
=> nil
[3] pry(main)> hello { |some_argument = "testing"| u = 20; block_binding = binding }
=> #<Binding:0x007fdd33b1f680>
[4] pry(main)> cd block_binding
[5] pry(#<Object>):1> ls
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_  _super  block_binding  some_argument  u
[6] pry(#<Object>):1> some_argument
=> "testing"
[7] pry(#<Object>):1> u
=> 20
[8] pry(#<Object>):1> self
=> #<Object:0x007fdd33b1f888>
[9] pry(#<Object>):1> 
于 2013-03-07T18:22:41.763 回答