您的位置:首页 > 编程语言 > Lua

Lua学习之表达式

2015-09-19 10:25 316 查看
坚持 成长 每日一篇

算术运算符

二元运算符:+-*/^(加减乘除幂)

一元运算:-(负值)

关系运算符

<  >  <=  >=  ==  ~=


如果两个值类型不同返回结果都是false。nil只能和自己相等。Lua通过引用比较tables,userdata,functions。也就是当且仅当两个表示同一个对象时候相等。类似OC的比较。

"0" == 0      -- false
2 < 15        -- true

"2" < "15"    -- false (alphabetical order!)


为了避免不一致的结果,混合比较数字和字符串大小,Lua会

逻辑运符

and  or  not


and 和 or 的运算结果不是 true 和 false,而是和它的两个操作数相关。

a and b -- 如果 a 为 false,则返回 a,否则返回 b
a or b -- 如果a为true,则返回a,否则返回b


C 语言中的三元运算符

a?b:c


在 Lua 中可以这样实现:

(a and b) or c


not 的结果只返回 false 或者 true

print(not nil)--> true
print(not false)--> true
print(not 0)--> false
print(not not nil)--> false


连接运算符

.. --两个点


字符串连接,如果操作数为数字,Lua 将数字转成字符串。

优先级

从高到低的顺序:


^(幂)
not - (unary)
*  /
+  -
..
< > <= >= ~= ==
and
or


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

表的构造

构造器是创建和初始化表的表达式。表是 Lua 特有的功能强大的东西。最简单的构

造函数是{},用来创建一个空表。

days = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"}


表的索引是从1开始所以days[1]是Sunday

我们可以初始化表为一个Record来使用

a = {x=0, y=0} <--> a = {}; a.x=0; a.y=0//先建空表,再添加域。


这里的x和y我们可以叫它为域。

注意:以Record方式的表我们要用访问字符串索引的是访问域里面的值。

每次调用{}构造函数,lua都会创建一个心的table。

在同一个构造函数中可以混合列表风格和 record 风格进行初始化,如:

polyline = {color="blue", thickness=2, npoints=4,
{x=0, y=0},--这里是polyline[1]
{x=-10, y=0}, --这里是polyline[2]
{x=-10, y=1}, --这里是polyline[3]
{x=0, y=1}--这里是polyline[4]
}


使用字符串索引初始化必须使用[]来包含字符串如:

a = {["mm"]=100}
a['mm']--> 100


我们也可以用[]来初始化数字索引表。这样我们可以以某个索引开始初始化表如:

{"red", "green", "blue"} <-->
{[1]="red", [2]="green", [3]="blue"}


注意:如果是数字索引的时候不能使用负索引初始化一个表中元素,但是我们可以从0开始,不推荐数组下标从 0 开始,否则很多标准库不能使用(新版Lua支持从负数开始初始化表)。

在构造函数中域分隔符逗号(“,”)可以用分号(“;”)替代,通常我们使用分号用来 分割不同类型的表元素。

{x=10, y=45; "one", "two", "three"}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: