Lua 语言的陷阱
博客专区 > 沙枣 的博客 > 博客详情
Lua 语言的陷阱
沙枣 发表于2年前
Lua 语言的陷阱
  • 发表于 2年前
  • 阅读 140
  • 收藏 9
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 在用 Lua 实现 Spp 的过程中,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, 不能这样写:

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

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

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

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

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

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

标签: Lua Spp
共有 人打赏支持
粉丝 21
博文 109
码字总数 197204
×
沙枣
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: