1. LUA 函数特征:
a. 第一类值
b. 词法域(内函数可以访问外函数的局部变量)
2. 尾调用消除(不再返回调用原函数)
return <func>(<args>)
3. colsure 迭代
function values(t)
local i=0
return function() i=i+1; return t[i] end
end
/* 用 while 循环访问所有元素 */
t = {1,2,3}
itr = values(t)
while true do
local element = iter()
if element == nil then break end
print(element)
end
/* 泛式 for 访问所有元素 */
for element in values(t) do
print(element)
end
4. 若函数调用不是一系列表达式的最后一个元素,则函数返回单值。
5. 给函数加上 () ,强制其返回单值。
6. unpack() 解包数组所有元素为多值返回(下标从 1 开始)。
7. LUA 支持变长参数 f(…) ,其中 … 为参数数组,访问机制如下:
a. for i,v in ipairs{…} do … end
b. for i=1,select(“#”,…)do
local arg = select(i,…)
…
end
8. 当实参只有一个 table 构造式时, () 可有可无。
9. 函数定义实际是一条赋值语句,这语句创建了一类型为函数的值,并将值赋予一个变量。
10. 匿名函数: function(x) return x end
11. closure 指一个函数及其所能访问到的一系列“非局部变量” (upvalue) 。
就是可以访问其外部嵌套环境中的局部变量的函数(可做计数器)。
12. closure 做迭代器:
for val_1,…var_n in <explist> do
<block>
end
等价于:
do
local _f,_s,_var = <explist>
while true do
local var_1,…,varn = _f(_s,_var)
_var = var_1
if _var == nil then break end
<block>
end
end
_f: 迭代器函数
_s: 恒定状态
_var: 控制变量初始值

1355

被折叠的 条评论
为什么被折叠?



