呼叫prybinding.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
两者都表示相同的上下文这是怎么回事是否有需要调用pryoverNameError: undefined local variable的情况?

最佳答案

重复我在评论中说的话。
如果您查看方法(http://www.rubydoc.info/github/pry/pry/Object)的源代码,它将被修补到对象上,这意味着您可以基本上对任何对象调用它。无论您调用什么,在随后的repl中都会变成self的值。pryself.pryPry.start(self)都做同样的事情。
binding是一种神奇的/复杂的东西,它捕获某个地方的“上下文”,并使这些局部变量可以从其他地方访问通过使用binding.pryPry.start(binding)可以确保局部变量在REPL的作用域内(具体如何,我不能说)。
您还可以看到binding在其他地方使用,您希望在其他一些作用域中引用局部变量。例如,要计算ERB字符串,可以使用ERB.new(string).result(binding)

关于ruby - `binding.pry`与`pry`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47916494/

10-13 04:44