【Programming in Lua1-7章】读书笔记

很多细节的小点为了防止自己遗忘,也方便以后查询,顺带回顾一下,分tips记录在这里。较为常识的Lua语法在这里就不在赘述了。

  • Lua返回值可以是多个,但是在一些特定情况下只有一个。如用小括号强制返回一个,函数返回值在赋值语句中不是最后一个:

     

    x,y = foo2(), 20  

    -- x='a', y=20  foo2返回两个值,但是此时只能返回一个

  • Lua 中类似 return g(...)这种格式的调用是尾调用。但是 g 和 g 的参数都可以是复杂表达式,因为 Lua 会在调用之前计算表达式的值。例如下面的调用是尾调用: return x[i].foo(x[j] + a*b, i + j)
  • 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。说白了目前的迭代器就是利用闭包的upvalue来保存值,实现循环调用。
  • for <var-list> in <exp-list> do
    
     <body>
    
    end

    <var-list>是一个或多个以逗号分割的变量名列表,<exp-list>是一个或多个以逗号分割的表达式列表,通常情况下 exp-list 只有一个值:迭代工厂的调用。

    首先,初始化,计算 in 后面表达式的值,表达式应该返回范性 for 需要的三个值:迭代函数,状态常量和控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个会自动用 nil 补足,多出部分会被忽略。

    第二,将状态常量和控制变量作为参数调用迭代函数(注意:对于 for 结构来说,

    状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数)。

    第三,将迭代函数返回的值赋给变量列表。

    第四,如果返回的第一个值为 nil 循环结束,否则执行循环体。 第五,回到第二步再次调用迭代函数。 更精确的来说:

    for var_1, ..., var_n in explist do block end

    等价于

    do  local _f, _s, _var = explist  while true do   local var_1, ... , var_n = _f(_s, _var)

      _var = var_1   if _var == nil then break end

      block  end

    end

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值