LUA 学习笔记 02

来源:互联网 发布:网络评论兼职 编辑:程序博客网 时间:2024/04/28 08:51

1. LUA函数特征:

   a.第一类值

   b.词法域(内函数可以访问外函数的局部变量)


2. 尾调用消除(不再返回调用原函数)

  return <func>(<args>)


3. colsure迭代

   functionvalues(t)

              locali=0

            return function() i=i+1; return t[i]end

  end


/* 用while循环访问所有元素 */

t = {1,2,3}

itr = values(t)

while true do

       localelement = iter()

       ifelement == 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

              localarg = 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>

              whiletrue do

                     localvar_1,…,varn = _f(_s,_var)

                     _var= var_1

                     if_var == nil then break end

              <block>

              end

end


_f: 迭代器函数

_s: 恒定状态

_var: 控制变量初始值