【发布时间】:2013-08-04 08:24:59
【问题描述】:
在 CoffeeScript 中:
f = ->
v = 5
g = ->
v
g()
f() # returns 5 as expected
在 Ruby 中:
def f
v = 5
def g
v # undefined local variable or method `v' for main:Object (NameError)
end
g
end
f
好的,显然 JavaScript 函数被设置为在创建它们的范围内捕获变量,但 Ruby 的方法不是。有没有办法让 Ruby 方法在这方面表现得像 JavaScript 函数?
【问题讨论】:
-
Ruby 没有函数。它有方法,也有块。方法有新的作用域,块有嵌套的作用域。
-
@JörgWMittag 实际上,正如我从 Fred 的回答中了解到的,Ruby 有方法和 闭包。块只是 Ruby 中的三种闭包之一。还有 Lambdas 和 Procs。
-
Lambdas 和 Procs 只是通过将块传递给方法来创建的对象。 (或使用 lambda 文字语法。)
标签: javascript ruby coffeescript closures