function - Lua函数需要赋值给变量
问题描述
最近一直在尝试学习一些lua,今天遇到了一些我对函数不理解的东西,下面的代码不起作用
function iter()
local i=0
return function() print(i); i=i+1; end
end
iter()
iter()
我必须为我的函数 iter() 分配一个变量,然后在它运行之前调用该变量:
function iter()
local i=0
return function() print(i); i=i+1; end
end
it=iter()
it()
it()
谁能澄清这是为什么?
解决方案
首先,函数只是值。您的外部函数已分配给变量iter
。该函数返回一个匿名函数。(“匿名”只是意味着您在返回之前没有给函数命名。)
其次,括号中的参数列表基本上是一个调用函数的运算符(除非它在函数声明中)。当您使用该运算符时,函数会运行并且表达式会产生返回值。
在语句中iter()
,您调用一个函数并忽略它的返回值,因此您永远无法看到内部函数运行。
在语句中it = iter()
,您最终会得到一个名为it
. 每次调用它时,它都会从创建它i
的调用内部增加变量。iter
作为旁注,说iter()()
立即调用返回的函数是合法的。这在您的情况下实际上没有用,因为每次调用iter
都会返回一个i
从零开始的新闭包。
推荐阅读
- sql - SQL (Omnisci) 获取列的常见和不常见值
- python - Heroku 上的二进制 Python 模块导入错误:ImportError: /app/mylib.so: undefined symbol: _PyGC_generation0
- asp.net-core - CustomConverter 与 web api 中同一类的属性进行比较
- graph - 如何绘制具有任意数量孩子的树?
- python - 如何使用此 python 脚本解密加密文件?
- sap-cloud-sdk - SAP Cloud SDK -Java 中是否支持 Odata 过滤器功能
- powerbi-desktop - 为 Power BI Desktop 中数据集中的每一行导入 CSV
- java - SWT Text:删除 Linux 中的默认上下文菜单项
- c++ - 取消引用 void 指针以将值分配给结构
- python - 如何根据用户在 Dash Plot 中的特定输入处理 Dash Plot for Graph 中的回调