2
Ruby的eval()
可以像Ruby的「綁定」與Scope Chain相同嗎?
def showblock(&block)
puts eval("i * 3", block)
end
其中塊是傳遞到功能塊。
除了塊之外,還可以傳入綁定對象。綁定對象與所討論的Javascript關閉時提到的「範圍鏈」是否相同?
Ruby的eval()
可以像Ruby的「綁定」與Scope Chain相同嗎?
def showblock(&block)
puts eval("i * 3", block)
end
其中塊是傳遞到功能塊。
除了塊之外,還可以傳入綁定對象。綁定對象與所討論的Javascript關閉時提到的「範圍鏈」是否相同?
經過一番研究,我會說是的,他們似乎是相關的概念。
JS中的作用域鏈維護執行上下文(變量綁定等)的列表,其中鏈的一端當前正在執行的範圍的上下文以及全局範圍。只要閉包是可到達的,創建一個引用自由變量的閉包就需要保持該上下文列表。
Ruby的綁定對象的文件說:在代碼中的一些 特定的位置和 類綁定封裝 執行上下文的
對象保留此背景下以備將來使用。 所有保留的變量,方法,自身的值, 以及可能在此上下文中可訪問的迭代器塊 均爲 。綁定對象可以是使用Kernel#binding創建的 ,並且 可用於 Kernel#set_trace_func的回調。
這些綁定對象可以作爲 內核#eval 方法的第二個參數傳遞,建立用於評估的環境 。
我不太瞭解Binding實現方式的內部結構,但它似乎具有相同的目的:爲將來的評估存儲上下文。