lua的语句

| 分类 lua  | 标签 lua 

本文为xiedantibu在学习lua程序设计的笔记 ,转载请注明作者及出处! ###目录 —-     前言
    赋值
    关系操作符
    逻辑操作符
    字符串连接
    优先级
    table构造式


####前言 — Lua支持的常规语句基本上与C语言中所支持的语句差不多。这些语句包含赋值、控制结构和过程调用。另外Lua还支持一些不太常见的语句,例如多重赋值和局部变量声明。


####赋值 — 赋值的基本含义是修改一个变量或一个table中字段的值,除了这普通的赋值,Lua还允许”多重赋值”,也就是一下子将多个值赋予多个变量,每个值或变量之间以逗号分隔。

local a,b = 10, 20
print("a:"..a,"b:"..b)        -->a:10	b:20 在多重赋值中,Lua先对等候右边的所有元素求值,

####关系操作符

Lua提供的关系操作符有:”<” ”>” ”<=” ”>=” ”==” ”~=”所有这些操作符的运算结果都是true或false。
操作符==用于相等性测试,操作符~=用于不等性测试。这两个操作符可以应用于任意两个值。如果两个值具有不同的类型,Lua就认为它们是不相等的;nil只与其自身相等。
对于table、userdata和函数,Lua是作引用比较的。也就是说,只有当它们引用同一个对象时,才认为它们相等。
为了避免类型不一致的比较,Lua在遇到字符串和数字的大小比较时会引发一个错误,如2 < "15"就会导致这种错误。


####逻辑操作符 — Lua提供的逻辑操作符有and、or和not。与条件控制语句一样,所有的逻辑操作符将false和nil视为假,而将其它的任何东西视为真。对于操作符and来说,如果它的第一个操作数为假,就返回第一个操作数;不然就返回第二个操作数。对于操作符or来说,如果它的第一个操作数为真,就返回第一个操作数;不然就返回第二个操作数。
对了这里要说明下,Lua的and以及or逻辑操作符并不是返回true或false,而是返回操作数的值。对于not操作符则永远只返回true或者false

======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操作符===========
print(not nil)     -->true
print(not false)	-->true
print(not 0)	-->false
print(not not nil)	-->false

and和or都使用”短路求值”,也就是说,它们只会在需要时候才去评估第二个操作数。

有一种常用的lua习惯写法x = x or v,其等价于:if not x then x = v end 它可用在没有设置x的时候(既对 x的求值结果为假时),将其设置为一个默认值v。

还有一种习惯写法是a and b or c,这类似于C语言中的表达式a ? b : c,但前提是b不为假。例如,为了选出数字x和y中的较大者,可使用以下语句:max=(x>y) and x or y


####字符串连接 — 关于字符串连接在上文中,我们就在代码中碰到,这里说明下,在Lua中连接两个字符串,可以使用操作符” .. “(两个点,左右两边都有一个空格)。如果其任意一个操作数是数字的话,Lua会将这个数字转换成一个字符串。Lua中字符串是不可变的值,连接操作符只会创建一个新字符串,而不会对其原操作数进行任何修改。

a="hello"
print(a .. " world ")   -->hello world
print(a)				-->hello

####优先级 — Lua操作符优先级如下图(从高到低):
image
在二元操作符中,除了指数操作符”^”和连接操作符”..”是”右结合”的,所以其他操作符都是”左结合”


####table构造式 — 构造式是用于创建和初始化table的表达式。这是Lua中特有的一种表达式,并且也是Lua中最有用、最通用的机制之一。
最简单的构造式就是一个空构造式{},用于创建一个空table。构造式还可以用于初始化数组,数组的下标从1开始。

days={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
print(days[1])  -->Sunday
print(days[4])	-->Wednesday

Lua还提供了一种特殊的语法用于初始化记录风格table:

local a = {x=10,y=30}
print(a.x)	-->10
print(a["y"])	-->30 以上两种风格的构造式各有其限制。如,不能使用负数的索引,也不能用运算符作为记录的字段名。  下面介绍一款更通用的格式:  

opnames = {["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"}
i=20;
s="-"
a={[i+0] = s, [i+1] = s..s,[i+2]=s..s..s}
print(opnames[s])      --> sub
print(a[21])		   --> -- 这种语法看起来很繁琐,但是很灵活。无论是列表风格的初始化,还是记录风格的初始化,都是这种通用语法特例。构造式`{x=0,y=0}`等价于`{["x"]=0,["y"]=0}`。构造式`{"r","g","b"}`等价于`{[1]="r",[2]="g",[3]="b"}`

####END

青春是一场大雨,即使感冒了,还盼回头再淋一次...image...微笑永远是一个人身上最好看的东西...


PREVIOUS     NEXT