2013-03-06 3 views
0

나는 당신이 다른 범위로 "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   
... 

그러나 대화식 세션을 메소드로 전달 된 블록으로 옮기는 방법이 있습니까?

가능하면 매우 도움이 될 것입니다. 나는 바인딩을 얻으려고 노력했다. 행운을 빌리지 않고 이런 식으로 자신을 일하게하라.하지만 계속하기 전에 내가 올바른 길을 가고 있는지 확인하고 싶었다.

+2

하여 작동합니다 :

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

은 블록 내에서 앞으로 pry 반입 (필요한 2 exit 문을 참고) , 블록에'binding.pry'를 넣을 수 있습니다. –

+0

ruby-debug does ... – rogerdpack

+0

@rogerdpack, 어떻게'debugger' 문을 삽입하지 않고 루비 디버그에서 이것을 할 수 있습니까? (당신은'binding.pry' 문을 삽입하는 것만으로도 할 수 있습니다) – horseyguy

답변

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> 
0

실제로 아름답게 pry 작품을 중첩 것으로 나타났다.팀의 명성

일단 내가 내 작은 binding.pry 문제가 방법 (내 잘못이 문제).

중첩 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$ 
관련 문제