【发布时间】:2009-06-19 05:04:36
【问题描述】:
我确信对此有一个简单的答案;我似乎无法找到它。我在 Ruby 中创建了一个嵌套函数,但在从内部函数内部的外部函数访问变量时遇到了问题:
def foo(x)
def bar
puts x
end
bar
42
end
foo(5)
我得到:NameError: undefined local variable or methodx' for main:Object`
类似的 Python 代码可以工作:
def foo(x):
def bar():
print x
bar()
return 42
foo(5)
那么我如何在 Ruby 中做同样的事情呢?
【问题讨论】:
-
这里一个重要(但微妙)的区别是 def...end 定义了一个方法,而不是一个函数。使用 lambda/proc 定义函数并在闭包中捕获局部变量,如 tadman 所示。