文档章节

Lua 语言的陷阱

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

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
04/19
0
0
愤怒的小鸟开发语言火爆,挤掉 JavaScript

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

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

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

晓寒
2014/09/03
0
0
Lua的网友评论

Lua 是一个扩展式程序设计语言,它被设计成支持通用的过程式编程,并有相关数据描述的设施。 Lua 也能对面向对象编程,函数式编程,数据驱动式编程提供很好的支持。 它可以作为一个强大、轻量...

红薯
2009/12/11
490
1

没有更多内容

加载失败,请刷新页面

加载更多

分布式锁的实现

redis实现分布式锁 方法1:普通实现方案 实现方式: 使用指令: set key 随机值 ex 5 nx.意思是当key不存在的时候设置key. 如果key存在返回OK,否则返回nil. 实现过程: 1.执行命令set key true ...

grace_233
24分钟前
1
0
解决CKEditor 4 富文本编辑器在图片组件无法显示[上传]选项卡的相关问题

关于解决CKEditor 4 富文本编辑器在图片组件无法显示[上传]选项卡的相关问题。 本文可能会对以下现象得以解决: 图片上传组件,没有 [上传] 选项卡。 资源无法加载 [imgupload] ( Uncaught E...

Eller
27分钟前
0
0
限制php解析、user_agent、php相关配置

11月20日任务 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置 11.28、限定某个目录禁止解析php 核心配置文件内容 <Directory /data/wwwroot/www.123.com/upl...

zgxlinux
32分钟前
1
0
博客园首页新随笔联系订阅管理 随笔

注解Annotation实现原理与自定义注解例子 什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的...

onedotdot
49分钟前
4
1
Spring boot + redis 用RedisTemlate实现简单的String key value 操作

springboot集成redis, 简单的key, value缓存操作. 1. application-local.properties # redis on local#spring.redis.port=6379#spring.redis.host=localhost#spring.redis.password=......

园领T
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部