[转载] Lua 中与 C 不同的设计

尽管 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会自动在stringnumber之间自动进行类型转换。

 

关系运算符

 

 

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,我们都可以向表中添加或者删除任何类型的域,构造函数仅仅影响表的初始化。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值