Lua
LUA 的值与类型
Lua 中有八种基本类型: nil、boolean、number、string、function、userdata、 thread 和 table。
LUA 的特点之 TALBE
Table = 数组 + 映射
程序猿从 0 开始,大众习惯从 1 开始
数组下标从 1 开始,连续使用,自动扩展
LUA 的函数
- 万物皆值
函数也是一种值
- 凭什么 C 语言只能返回 1 个
函数支持多返回参数
LUA 的函数表达式
逻辑运算就是说英文
– and or not
例:print(true and false);
字符串连接用 ..
例:print(“hello”..”world”);
local 大法好
优化代码,作用域控制
LUA 的迭代器遍历
迭代器之数组遍历
1 | for index, value in ipairs(table) do |
迭代器之 Table 遍历
1 | for key, value in pairs(table) do |
LUA 的表处理
这个库提供了表处理的通用函数。 所有函数都放在表 table 中。
记住,无论何时,若一个操作需要取表的长度, 这张表必须是一个真序列,或是拥有 __len 元方法 (参见 §3.4.7 )。 所有的函数都忽略传入参数的那张表中的非数字键。
table.concat(list [, sep [, i [, j]]])
提供一个列表,其所有元素都是字符串或数字,返回字符串 list[i]..sep..list[i+1] ··· sep..list[j]。 sep 的默认值是空串, i 的默认值是 1 , j 的默认值是 #list 。 如果 i 比 j 大,返回空串。
表连接 返回值:字符串
1 | -- 例子: |
table.insert (list, [pos,] value)
在 list 的位置 pos 处插入元素 value , 并后移元素 list[pos], list[pos+1], ···, list[#list] 。 pos 的默认值为 #list+1 , 因此调用 table.insert(t,x) 会将 x 插在列表 t 的末尾。
添加 table 参数 返回值:table
1 | -- 例子: |
table.move (a1, f, e, t [,a2])
将元素从表 a1 移到表 a2。 这个函数做了次等价于后面这个多重赋值的等价操作: a2[t],··· = a1[f],···,a1[e]。 a2 的默认值为 a1。 目标区间可以和源区间重叠。 索引 f 必须是正数。
table.pack (···)
返回用所有参数以键 1,2, 等填充的新表, 并将 “n” 这个域设为参数的总数。 注意这张返回的表不一定是一个序列。
table.remove (list [, pos])
移除 list 中 pos 位置上的元素,并返回这个被移除的值。
移除 table 参数 返回值:table
当 pos 是在 1 到 #list 之间的整数时, 它向前移动元素 list[pos+1], list[pos+2], ···, list[#list] 并删除元素 list[#list];
索引 pos 可以是 #list + 1 ,或在 #list 为 0 时可以是 0 ;
在这些情况下,函数删除元素 list[pos]。
pos 默认为 #list, 因此调用 table.remove(l) 将移除表 l 的最后一个元素。
table.sort (list [, comp])
在表内从 list[1] 到 list[#list] 原地 对其间元素按指定次序排序。 如果提供了 comp , 它必须是一个可以接收两个列表内元素为参数的函数。
当第一个元素需要排在第二个元素之前时,返回真 (因此 not comp(list[i+1],list[i]) 在排序结束后将为真)。
如果没有提供 comp, 将使用标准 Lua 操作 < 作为替代品。
排序算法并不稳定; 即当两个元素次序相等时,它们在排序后的相对位置可能会改变。
table.unpack (list [, i [, j]])
返回列表中的元素。 这个函数等价于
return list[i], list[i+1], ···, list[j]
i 默认为 1 ,j 默认为 #list。