代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

ruby的“绑定”与scope chain相同吗?

  •  2
  • nonopolarity  · 技术社区  · 14 年前

    露比 eval() 可以像

    def showblock(&block)
      puts eval("i * 3", block)
    end
    

    其中block是传递给函数的块。

    也可以传入绑定对象,而不是块。绑定对象是否与在讨论javascript闭包时经常提到的所谓“范围链”相同?

    1 回复  |  直到 14 年前
        1
  •  2
  •   J Cooper    14 年前

    经过一些研究,我会说是的,他们似乎是相关的概念。

    js中的作用域链维护一个执行上下文列表(变量绑定等),当前执行作用域的上下文位于链的一端,全局作用域位于链的另一端。创建一个引用一个自由变量的闭包时,只要该闭包是可访问的,就必须保留该上下文列表。

    ruby绑定对象的文档说明:

    类绑定对象封装 执行上下文 代码中的特定位置 保留此上下文以供将来使用。 变量,方法,自我价值, 可能还有一个迭代器块 在此上下文中可以访问的是 全部保留。绑定对象可以是 使用内核绑定创建,并且 可用于回拨 核函数。

    这些绑定对象可以作为 核eval的第二个参数 方法,建立环境 为了评估。

    我不太了解如何实现绑定的内部机制,但它似乎有着相同的用途:存储上下文以供将来评估。