`binding.pry`全部在
`binding.pry` vs `pry`
调用pry
和binding.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
的情况?
重申我在评论中所说的话。
如果您查看该方法的源代码 (http://www.rubydoc.info/github/pry/pry/Object),它会在 Object 上进行修补,这意味着您基本上可以在任何对象上调用它。在随后的 REPL 中,无论你调用它什么都会成为 self
的值。 pry
、self.pry
和 Pry.start(self)
都做同样的事情。
binding
是一种 magic/complicated 的东西,它在某个地方捕获 'context',并使这些局部变量可以从其他地方访问。通过使用 binding.pry
或 Pry.start(binding)
,您可以确保局部变量在 REPL 的范围内(具体如何,我不能说)。
您还看到 binding
在您想要在其他范围内引用局部变量的其他地方使用。例如,要计算 ERB 的字符串,您可以使用 ERB.new(string).result(binding)
。
调用pry
和binding.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
的情况?
重申我在评论中所说的话。
如果您查看该方法的源代码 (http://www.rubydoc.info/github/pry/pry/Object),它会在 Object 上进行修补,这意味着您基本上可以在任何对象上调用它。在随后的 REPL 中,无论你调用它什么都会成为 self
的值。 pry
、self.pry
和 Pry.start(self)
都做同样的事情。
binding
是一种 magic/complicated 的东西,它在某个地方捕获 'context',并使这些局部变量可以从其他地方访问。通过使用 binding.pry
或 Pry.start(binding)
,您可以确保局部变量在 REPL 的范围内(具体如何,我不能说)。
您还看到 binding
在您想要在其他范围内引用局部变量的其他地方使用。例如,要计算 ERB 的字符串,您可以使用 ERB.new(string).result(binding)
。