pry或irb是否允许您从块内交互式工作?

时间:2013-03-06 23:34:00

标签: ruby irb pry

我知道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)>

如果可能的话,这将非常有帮助。我已经尝试过以这种方式绑定自己,没有运气,但我想确保在继续之前我走上正确的道路。

2 个答案:

答案 0 :(得分: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> 

答案 1 :(得分:0)

实际上,事实证明嵌套pry非常有效。感谢pry团队。

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

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

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$