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

<Lua程序设计(第二版)>书摘-2

2014-04-07 00:05 274 查看
资料摘自<Lua程序设计(第二版)>

表达式

算术操作符

Lua支持的常规算术操作符有:二元的"+"(加法)、"-"(减法)、"*"(乘法)、"/"(除法)、"^"(指数)、"%"(取模),一元的"-"(负号)。所有这些操作符都可用于实数。例如,x^0.5将计算x的平方根,x^(-1/3)将计算x立方根的倒数。

关系操作符

Lua提供了以下关系操作符:

< > <= >= == ~=

所有这些操作符的运算结果都是true或false

操作符==用于相等性测试,操作符~=用于不等性测试。这两个操作符可以应用于任意两个值。如果两个值具有不同的类型,Lua就认为它们是不相等的。否则,Lua会根据它们的类型来比较两者。特别需要说明的是,nil只与其自身相等。

对于table、userdata和函数,Lua是作引用比较的。也就是说,只有当它们引用同一个对象时,才认为它们相等。例如,以下代码:

a = {};a.x = 1;a.y = 0

b = {};b.x = 1;b.y = 0

c = a

其结果是 a==c,但 a~=b

只能对两个数字或两个字符串作大小比较。Lua是按照字母次序比较字符串的,具体的字母次序取决于对Lua的区域设置。

逻辑操作符

逻辑操作符有and、or和not。与条件控制语句一样,所有的逻辑操作符将false和nil视为假,而将其他的任何东西视为真。对于操作符and来说,如果它的第一个操作数为假,就返回第一个操作数;不然返回第二个操作数。对于操作符or来说,如果它的第一个操作数为真,就返回第一个操作数;不然返回第二个操作数。

print(4 and 5) -->5

print(nil and 13) -->nil

print(false and 13) -->false

print(4 or 5) -->4

print(false or 5) -->5

操作符not永远只返回true或false:

print(not nil) -->true

print(not false) -->true

print(not 0) -->false

print(not not nil) -->false

字符串连接

要在Lua中连接两个字符串,可以使用操作符".."(两个点)。如果其任意一个操作数是数字的话,Lua会将这个数字转换成一个字符串:

print("Hello".."World") -->Hello World

print(0..1) -->01

请记住,Lua的字符串是不可变的值。连接操作符只会创建一个新字符串,而不会对其原操作数进行任何修改:

a = "Hello"

print(a.." World") -->Hello World

print(a) -->Hello

table构造式

构造式是用于创建和初始化table的表达式。这是Lua特有的一种表达式,并且也是

Lua中最有用、最通用的机制之一。

最简单的构造式就是一个空构造式{},用于创建一个空table。构造式还可以用于初始化数组。例如,以下语句:

days = {"sunday","monday","tuesday","wednesday","thursday","friday","saturday"}

会将days[1]初始化为字符串"sunday"、days[2]初始化为"monday",以此类推。(这种是列表风格的初始化)

a = {x=10,y=20} --这种是记录风格的初始化

以上代码等价于:

a={};a.x=10;a.y=20

以上两种风格的构造式各有限制。Lua提供了一种通用的格式,这种格式允许在方括号之间,显式地用一个表达式来初始化索引值:

opnames = {["+"]="add",["-"]="sub",["*"]="mul",["/"]="div"}

a={[20]="b",[21]="c",[22]="d"}

无论是列表风格,还是记录风格,都是这种通用语法的特例。构造式{x=0,y=0}等价于{["x"]=0,["y"]=0},构造式{"r","g","b"}等价于{[1]="r",[2]="g",[3]="b"}。

无论使用哪种方式来创建table,都可以在table创建之后添加或删除其中的某些字段:

w={x=0,y=0,label="console"}

x={math.sin(0),math.sin(1),math.sin(2)}

w[1] = "another field" --添加key 1到table w

x.f = w --添加key "f"到table x

print(w["x"]) -->0

print(w[1]) -->another field

print(w.f[1]) -->another field

w.x = nil --删除字段"x"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: