1、 lua标识符避免下划线接大写字母,该格式为lua保留关键字。
2、 当使用全局变量时,在变量名前加个g字母更易于区分。
3、 在lua中,false和nil都被逻辑运算符当做false。
4、 Lua使用return去调用另一个函数,当调用return后,原函数从栈中删除,降低栈溢出的风险。即所谓的尾调用(tail-call):在尾调用中,被调用的函数重用调用它的函数的堆栈项。 因此,对于程序执行的嵌套尾调用的层数是没有限制的。 然而,尾调用将删除调用它的函数的任何调试信息。
5、 可以使用loadstring函数将编好的代码块存在string中,然后使用assert函数执行。
6、 luaGlue函数:lua脚本中调用C++函数的接口。
Lua API提供了函数供C++调用lua函数。
7、 数据存储:
对于大型或角色扮演类游戏,都需要载入大量数据,可以使用表单型数据,即使用Excel编辑数据并保存为CSV格式,然后通过lua程序加载,读取数据。这种方式适合有大量数据需要存储,并且数据之间有关联;对于数据之间不需要相互关联,单独查看更好的使用lua格式数据文件。
8、 界面设计原则:
1) 保持界面的简洁;2)保持舒服的视觉体验;3)只显示重要的信息;4)提供有意义的反馈
9、 lua调试技巧:
1) 调用DoFile函数,查找非逻辑错误;
2) Lua错误消息,显示某一行的错误消息,尽量使用能显示行数的编辑器;
3) 使用实时调试窗口;
4) 使用文本框;
5) 使用文件输出:当需要调试高速数据处理或者大数据量处理时,在调试窗口中输出信息的做法不是很有效。
10、 lua中函数与所有其它值一样都是匿名的,即他们没有名称。当讨论一个函数名时,实际上是在讨论一个持有某函数的变量。
11、 所谓Closure就是一个函数加上该函数所需访问的非局部变量。
闭包的作用:1)可作为高阶函数的参数,如作为sort函数的参数;(高阶函数:接受另一个函数作为实参的函数)
2)可用于创建其它函数的函数(如计数器函数);
3)重新定义某个函数;
4)创建一个安全的运行环境,即所谓的“沙盒”
12、 元表
Lua中的每个值都有一个元表。table和userdata可以有各自独立的元表,而其他类型的值则共享其类型所属的单一元表。可以使用setmetatable设置或修改任何table的元表。在Lua代码中,只能设置table的元表,若要设置其他类型的值得元表,则必须通过C代码来完成。
13、 算数类元方法
__add(加法)、__mul(乘法)、__sub(减法)、__div(除法)、__unm(相反数)、__mod(取模)、__pow(乘幂)
14、 关系类元方法
__eq(等于)、__lt(小于)、__le(小于等于)
15、 库定义的元方法
__tostring(格式化输出)、__metatable(保护集合元表)
16、 table访问元方法
__index(用于table的查询)__newindex(用于table的更新)
17、比较相等时,对于表、用户数据以及线程都按引用比较;如果参数都是数字, 它们按二元操作的常规进行。 否则,如果两个参数都是字符串, 它们的值按当前的区域设置来比较。 再则,Lua 就试着调用 "lt" 或是 "le" 元方法 (参见 §2.4)。 a > b 的比较被转译为 b < a, a >= b 被转译为 b <= a。
注意: 1) 在一条语句以小括号开头时,前面加个分好避免二义性;
2)可以将函数调用放入一对圆括号中,从而迫使它只返回一个结果,如果函数不返回值得话,其结果就是nil,形如(f());
3)对整数数学运算溢出问题,采取的策略是按以2为补码的数学运算的环绕规则(即将返回其运算结果对2^64取模后的结果);