首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`binding.pry`诉“”

`binding.pry`诉“”
EN

Stack Overflow用户
提问于 2017-12-21 01:04:56
回答 1查看 1.3K关注 0票数 3

调用prybinding.pry有什么区别?例如:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-21 04:48:44

重覆我在评论中说的话。

如果您查看该方法的源代码(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)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47916494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档