一个关于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
展开
 我来答
yaoyue1019
2014-03-07 · 知道合伙人互联网行家
yaoyue1019
知道合伙人互联网行家
采纳数:804 获赞数:3392
擅长lua脚本 与android前端交互设计

向TA提问 私信TA
展开全部
这个其实不止是匿名函数的问题 这个的概念其实是涉及到了闭包 如果不太了解闭包可以暂时先不去考虑理解
函数A返回值是一个匿名的函数 这个匿名函数会改变函数A内的局部变量i
匿名函数每次被调用时 都会使A内的局部变量自增1并且返回这个值
你在执行时 c1 被赋予了这个匿名函数 所以每次调用c1都会输出这个每次都会自增的局部变量i
更多追问追答
追问
问题是这段代码运行起来 返回的是 匿名函数的地址 而不是i+1
追答
返回的本来就是匿名函数啊
调用匿名函数才会执行这里面的i+1 并且返回1
这个其实是官方课本里的关于闭包的示例代码 可以看看书 闭包那一节
matlab2000
2014-03-07 · TA获得超过2323个赞
知道大有可为答主
回答量:1678
采纳率:100%
帮助的人:1052万
展开全部
不是A函数的地址,是A函数返回的匿名函数的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式