pry
とbinding.pry
を呼び出す違いは何ですか?たとえば:`binding.pry`と` pry`
require 'pry'
class Bookshop
def initialize(book)
@books = []
@hp = 'harry potter'
lotr = 'lord of the rings'
@books << @harry_potter
@books << lord_of_the_rings
@books << book
binding.pry #OR pry
end
def print_all_books
puts @books.join(', ')
end
end
new_bookshop = Bookshop.new('the hobbit')
binding.pry
は私に、インスタンス変数@hp
へのアクセス、ローカル変数lotr
、およびインスタンスメソッドprint_all_books
を与えます。pry
は、インスタンス変数とメソッドにアクセスできますが、lotr
にはNameError: undefined local variable
がスローされます。
どちらも同じコンテキストを示します。ここで何が起こっているのですか? binding.pry
を超えるpry
を呼び出すことが望ましいケースはありますか?
'binding'はローカル変数が格納される特別なオブジェクトです。 'binding'オブジェクトに' pry'をパッチすることによって、これらのローカル変数はデバッガREPLに利用可能になります。もう一つのやり方があります: 'Pry.start(binding)'。 'pry'メソッドは実際には' Object'で定義されています。詳細については、[here](http://www.rubydoc.info/github/pry/pry/Object)を参照してください。 –
私はそれをテストしています。 'Pry.start (binding) 'は' binding.pry'と同じです。 'Pry.start(binding)'はもっと自明のようです。ありがとう!私はまだ「呼び出す」だけでは何をしているのか分からない。 –
'pry'メソッドはObject上で定義されているので、何かで呼び出すことができます:' '1.pry'などですが、これを行う理由はありません。 'binding'でそれを呼び出すと、ローカル変数が利用可能になります。 –