Lua泛型for
来源:互联网 发布:windows mobile 编辑:程序博客网 时间:2024/06/05 03:51
转自: http://www.cnblogs.com/byleaf/p/4387704.html
泛型for的语义
泛型for比较复杂,它在循环过程内保存了迭代器函数。它实际上保存着3个值:一个迭代器函数、一个恒定状态和一个控制变量。接下来,分别进行总结。
泛型for的语法如下:
for <var-list> in <exp-list> do <body>end
其中,<var-list>是一个或多个变量名的列表,以逗号分隔;<exp-list>是一个或多个表达式的列表,同样以逗号分隔。通常表达式列表只有一个元素,即一句对迭代器函数的调用。例如:
for k, v in pairs(t) do print(k, v) end
for做的第一件事就是对in后面的表达式求值,这些表达式应该返回3个值供for保存:迭代器函数、恒定状态和控制变量的初值。这里和多重赋值是一样的,只有最后一个表达式才会产生多个结果,并且只会保留前3个值,多余的值会被丢弃;而不够的话,就以nil补足。
在初始化完成以后,for会以恒定状态和控制变量来调用迭代器函数。然后for将迭代器函数的返回值赋予变量列表中的变量。如果第一个返回值为nil,那么循环就终止,否则,for执行它的循环体,随后再次调用迭代器函数,并重复这个过程。在前言部分的代码中,只是返回了迭代器函数,并没有返回恒定状态和控制变量。下面通过代码来说明这个问题,比如:
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 endend
阅读全文
0 0
- lua 泛型for
- Lua泛型for
- --泛型 for 的使用(lua)
- 对lua泛型for迭代器一些理解
- lua for S60v1
- 封装Lua for C#
- Lua for wireshark
- Monkey patcher for Lua
- LunarEclipse:IDE FOR LUA
- 封装Lua for C#
- Lua for循环
- Lua_tinker for lua 5.2
- Lua基础 generic for
- Protocol Buffers for lua
- ctags for lua relevant
- lua(1) for循环
- nginx api for lua
- Lua IDE for Lazarus
- 关于QT的 常量中有换行符 的问题
- java面试题及答案
- 【Leetcode】252,253 meeting room系列 区间问题
- UVA
- Python之——Eclipse +PyDev开发python,import其他模块时eclipse会报错,运行却没有问题
- Lua泛型for
- Codeforces 869C ( Codeforces Round #439 (Div. 2) ) The Intriguing Obsession 组合数学
- hdu 5646 拆数积最大 数学
- 5. 抽象工厂模式
- QT的信号和槽函数的使用(一)
- 17.10.7日报
- PHP explode() 函数
- [BZOJ2957]楼房重建-线段树
- 如何使用mybatis调用存储过程