文档章节

Lua 语言的陷阱

沙枣
 沙枣
发布于 2015/10/18 14:16
字数 510
阅读 149
收藏 13

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 的比较操作符 不等于是 '~=' 而不是 '!=', 只能说这个巴西人和别人不同。

© 著作权归作者所有

共有 人打赏支持
沙枣
粉丝 23
博文 122
码字总数 174704
作品 0
深圳
后端工程师
私信 提问
编程大牛推荐书籍

云风(中国游戏编程先行者,前网易游戏部门资深程序员,简悦创始人): C++编程思想 Effective C++ 深度探索C++对象模型 C++语言的设计和演化 C专家编程 C陷阱与缺陷 C语言接口与实现 Lua程序...

nop4ss
2015/10/10
34
0
Cocos2d-x 脚本语言Lua介绍

https://blog.csdn.net/wwj_748/article/details/31837997 Cocos2d-x 脚本语言Lua介绍 本篇博客记录Lua学习,学习来自eoe论坛,Lua语言开发Cocos2d-x游戏入门视频教程,猛戳以下地址: http...

tropicofcancer9
2018/04/19
0
0
愤怒的小鸟开发语言火爆,挤掉 JavaScript

随着的iOS开始支持的Lua脚本语言,许多iPhone游戏开始使用Lua的开发,例如愤怒的小鸟游戏,Lua的流行指数快速窜起,甚至在今年6月超越了JavaScript中,进入前10 TIOBE大开发语言排行。 根据全...

红薯
2011/07/04
7.7K
18
Lua1.1 Lua 的设计和实现 (一)

说明: 这个文档是 Lua1.1 的 doc 目录里的 lua.ps 文件。 同时这个文档可以这里找到:http://www.lua.org/semish94.html 原文版权归原作者所有,这篇翻译只是作为学习之用。如果翻译有不当之...

晓寒
2014/09/03
0
0
2011年6月编程语言排行榜,Lua进入前十

TIOBE发布了2011年6月份的编程语言排行榜,其中Lua语言延续上个月的增长势头,历史上第一次进入排行榜前十位,Java、C、C++依 然占据排行榜前3甲。1到10名依次为:Java、C、C++、C#、PHP、V...

vVqsGHcN
2011/06/08
15.2K
32

没有更多内容

加载失败,请刷新页面

加载更多

Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
1
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
3
0
day22:

1、写一个getinterface.sh 脚本可以接受选项[i,I],完成下面任务: 1)使用格式:getinterface.sh [-i interface | -I ip] 2)当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项...

芬野de博客
昨天
2
0
Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少...

程序猿DD
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部