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

私があなたを完全に理解しているかどうかはわかりませんが、これを試すことができます、例えば:

(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 に答える
1

実際、ネスティングがうまく機能することがわかりましたprypryチームへの称賛。

私が小さな 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$ 
于 2013-03-08T01:00:31.900 に答える