调用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上调用binding.pry?
发布于 2017-12-21 04:48:44
重覆我在评论中说的话。
如果您查看该方法的源代码(http://www.rubydoc.info/github/pry/pry/Object),它是对对象进行修补的,这意味着您基本上可以在任何情况下调用它。无论您将其称为什么,都将成为随后的REPL中的self值。pry、self.pry和Pry.start(self)都在做同样的事情。
binding是一种神奇/复杂的东西,它捕捉某个地方的“上下文”,并使这些局部变量可以从其他地方访问。通过使用binding.pry或Pry.start(binding),您可以确保局部变量在REPL的作用域中(确切地说,我不能说)。
您还可以看到在其他地方使用binding,在其他地方要引用其他作用域中的局部变量。例如,要计算一个ERB字符串,可以使用ERB.new(string).result(binding)。
https://stackoverflow.com/questions/47916494
复制相似问题