LUA 学习笔记 02

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: 控制变量初始值


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值