尽管 Lua 的关键词的设计,运行符的设计,语法的设计等方面与 C 很相似,但我们还要注意其明显不同的地方。

 

 

条件判断时的真假条件

 

 

Lua 中所有的值都可以作为条件。在控制结构的条件中除了 false 和 nil 为假,其他值都为真。所以 Lua 认为 0 和 空串 都是真。

而 C 中,认为只要是在内存中表现为 0 值的符号都为假。

 

 

字符串

 

 

Lua 中字符串的定义是 字符的序列。lua 的字符串可以包含任何数值字符,包括嵌入的 0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua 本身有相应的函数来处理这样的字符串。

而 C 语言中,虽然也可以在一个字符串中存放 0,但其字符串处理函数不能正确处理放在中间的零值,因为 C 中的算法不是用长度来做判断,而是以遇到第一个零值来判断的。


转义字符:

/a bell                                 /b back space -- 后退
/f form feed -- 换页                    /n newline -- 换行
/r carriage return -- 回车              /t horizontal tab -- 制表
/v vertical tab                         // backslash -- "/"
/" double quote -- 双引号               /' single quote -- 单引号
/[ left square bracket -- 左中括号      /] right square bracket -- 右中括号

 

还可以用[[…]]表示字符串,这种形式的字符串可以包含多行可以嵌套且不会解释转义序列。

运行时,Lua会自动在string和number之间自动进行类型转换。

 

关系运算符

 

 

Lua 中的不等号是 ~=,

而 C 中的不等号是 !=。

 

逻辑运算符

 

Lua 中的逻辑运算符是 and, or, not,而 C 中的逻辑运算符是 &&, ||, !。而且它们的用法很大的不一样,Lua 的逻辑运算符的用法显得有点“小技巧”。

Lua 逻辑运算符认为 false 和 nil 是假(false),其他为真,0也是true。
and 和 or 的运算结果不是 true 和 false,而是和它的两个操作数相关。
not 的结果一直返回 false 或者 true。


a and b -- 如果a为false,则返回a,否则返回b
a or b -- 如果a为true,则返回a,否则返回b
C语言中的三元运算符
a ? b : c
在Lua中可以这样实现:
(a and b) or c
 
连接运算符


..  --两个点
字符串连接,如果操作数为数字,Lua将数字转成字符串
 
优先级


从高到低的顺序:
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or


除了^和..外所有的二元运算符都是左连接的。
多变量赋值


Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。遇到赋值语句 Lua 会先计算右边所有的值然后再执行赋值操作。当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略


a. 变量个数>值的个数 按变量个数补足nil
b. 变量个数<值的个数 多余的值会被忽略


C 中,只有单变量赋值的概念。

 

表的构造


构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组(第一个元素索引为1)

不管用何种方式创建table,我们都可以向表中添加或者删除任何类型的域,构造函数仅仅影响表的初始化。