Lua 语言的陷阱

Lua 语言核心很小,用纯 C 构建,方便嵌入许多系统,并且语法简洁,文档齐备,还有速度更快的 LuaJIT 的解释器。因此决定用这种语言实现 Spp 的算法。算法

Lua 的标准库很小,JSON, 和 Seriarial Data 的模块都是第三方提供的,出了问题,是极可能的事情。数组

  1. Lua 数组的索引值是从 1 开始的,这和其余语言不一样,因此数组的长度和最后一个索引的值是相等的。我想这更直观,但习惯了别的语言后,就会对这个特性很疑惑。数据结构

  2. Lua 的 Table 实现的 Hash,虽然 Lua 容许任何值,包括 table 作 key, 但查看这种数据的 JSON, DataDumper 模块都不支持 key 是 table 的数据结构,没法查看,因此出了问题也不知道。函数

  3. Lua 的正则是用百分号引发的:%d %s %D %S, 数量标志还有减号,aa-, 等同于别的语言的 aa*?, Lua 没有split, 但有 join, 就是 table.concat, 只能合并字符串和数字,别的数据类型会让 Lua 崩溃。(而不是报错)索引

  4. Lua 的 table, push (table.insert)之后,返回的值不必定是变化后的 table, 多是 nil, 不能这样写:ip

    t = table.insert(t, 1, x)文档

Lua 会悄无声息的将你的数据给抹杀掉。字符串

  1. Lua 的 table 没法对比,即便: {1,2} == {1,2} 也是返回 false. 想要对比,就要逐个 key, value 的对比,直到对比的是数据。hash

  2. Lua 遍历 Array,Hash 的关键字是不一样的,但都要声明 key, Array 也能用 pairs(array), 而 Hash 就不能用 ipairs(hash).it

  3. 输出不带回车的函数是 io.write, print 默认是带回车的。

另外 Lua 的函数声明关键字 function 太长了,若是短一些,会更好。Lua 的比较操做符 不等因而 '~=' 而不是 '!=', 只能说这个巴西人和别人不一样。

相关文章
相关标签/搜索