以下Python代码:
def foo():
t = []
for i in range(1, 3):
def bar():
return i * i
t.append(bar)
return t
for f in foo():
print(f())
输出:4 4
。为什么不是第一个呼叫输出1
?我认为闭包bar()
可以保存i
的当前值。
function foo()
local t = {}
for i = 1, 2 do
local bar = function() return i * i end
table.insert(t, bar)
end
return t
end
for _, f in ipairs(foo()) do
print(f())
end
按我的预期输出1 4
。