呼叫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
overNameError: undefined local variable
的情况? 最佳答案
重复我在评论中说的话。
如果您查看方法(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)
。
关于ruby - `binding.pry`与`pry`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47916494/