一个关于lua的匿名函数问题
functionA()locali=0returnfunction()i=i+1returniendendc1=A()print(c1)这个为什么输出来的是函数A的地址而...
function A()
local i = 0
return function() i = i + 1 return i end
end
c1 = A()
print(c1)
这个为什么输出来的是 函数A的地址 而不是1 展开
local i = 0
return function() i = i + 1 return i end
end
c1 = A()
print(c1)
这个为什么输出来的是 函数A的地址 而不是1 展开
2个回答
展开全部
这个其实不止是匿名函数的问题 这个的概念其实是涉及到了闭包 如果不太了解闭包可以暂时先不去考虑理解
函数A返回值是一个匿名的函数 这个匿名函数会改变函数A内的局部变量i
匿名函数每次被调用时 都会使A内的局部变量自增1并且返回这个值
你在执行时 c1 被赋予了这个匿名函数 所以每次调用c1都会输出这个每次都会自增的局部变量i
函数A返回值是一个匿名的函数 这个匿名函数会改变函数A内的局部变量i
匿名函数每次被调用时 都会使A内的局部变量自增1并且返回这个值
你在执行时 c1 被赋予了这个匿名函数 所以每次调用c1都会输出这个每次都会自增的局部变量i
更多追问追答
追问
问题是这段代码运行起来 返回的是 匿名函数的地址 而不是i+1
追答
返回的本来就是匿名函数啊
调用匿名函数才会执行这里面的i+1 并且返回1
这个其实是官方课本里的关于闭包的示例代码 可以看看书 闭包那一节
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询