gpt4 book ai didi

ruby - `binding.pry` 与 `pry`

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:54 27 4
gpt4 key购买 nike

调用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 的值。 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com