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

自学Lua(2)--Lua表达式

2015-06-18 20:50 344 查看
算术操作符

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

关系操作符

-Lua提供的关系运算符有:“>”,“<”,“>=”,“<=”,“==”,“~=”。

-所有这些操作符的结果都是true或者false

-操作符==用于相等性测试,操作符~=用于不等性测试。这两个操作符可以运用于任意两个值。如果两个值具有不同的类型,Lua就认为它们是不相等的;特别需要注意的是:nil只与其自身相等,对于table,userdata和函数,Lua是做引用比较的,也就是说,只有它们作用于同一个对象时,才认为它们相等。

逻辑操作符

-Lua提供的逻辑运算符有:and,or和not。所有的逻辑操作符将false和true视为假,而将其他任何东西视为真。

-对于and操作符来说,如果它的第一个操作数为假,就返回第一个操作数,否则就返回第二个操作数;对于操作符or来说,如果它的第一个操作数为真,就返回第一个操作数,否则就返回第二个操作数。这里和C++等语言是有区别的,Lua的逻辑操作符并不是简单的返回true和false,而是返回操作数的值,例如以下代码:

-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


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

字符串连接

-如果要在Lua中连接两个字符串,可以使用操作符“..”(两个点)。如果其任意一个操作数是数字的话,Lua会将这个数字转换成一个字符串。在Lua中,字符串是不可变的值,连接操作符只会创建一个新的字符串,并不会对原操作数进行任何修改。

table构造式

-构造式是用于创建和初始化table表达式。

-最简单的构造式就是一个空构造{},用于创建一个空table

-构造式还可以用于初始化数组,数组的下标从1开始。

-例如:

local tbDays={“Sunday”,”Monday”,”Tuesday”,”Wednesday”,”Thurday”,”Friday”,”Saturday”}
print(tbDays[1])     -->Sunday
print(tbDays[2])     -->Monday
print(tbDays[3])     -->Tuesday
print(tbDays[4])     -->Wednesday
print(tbDays[5])     -->Thurday
print(tbDays[6])     -->Friday
print(tbDays[7])     -->Saturday


-Lua还提供了一种特殊的语法来初始化table

local tb1={x=10,y=10}
print(tb1.x)   -->10
print(tb1[“x”])   -->10


除此之外,Lua还提供了一种更通用的格式,这种格式允许在方括号之间,显式的用一个表达式来初始化索引值,例如:

local tb1={[“+”]=”add”,[“-”]=”sub”,[“*”]=”mul”,[“/”]=”div”}
print(tb1[“+”])


比如local tb1={x=10,y=10}这种构造方式,其实是和local tb1={[“x’]=10,[“y”]=20}是等价的,在实际编程中,这两种构造方式,可以替换使用。

在Lua5.1中,长度操作符“#”用于返回一个数组或线性表的最后一个索引值。

在实际项目中,我们经常使用该操作符来获取数组或线性表的长度。但是使用该操作符是存在陷阱的,比如下面一段代码:

local a={}
a(1000)=1
print(#a)


这该输出多少呢?在Lua中,对于所有未初始化的元素的索引结果都是nil。Lua将nil作为界定数组结尾的标志。当一个数组有“空隙”时,即中间含有nil时,长度操作符就会认为这些nil元素是结尾标记。因为a[1]=nil,所以对上述代码的输出应该是0。所以,在处理table的时候,需要考虑这个问题。那么对于含有nil的table,如何获取它的长度呢?我们可以使用table.maxn,它将返回table的最大正索引数,如下所示:

local a={}
a(1000)=1
print(table.maxn(a))  --->1000


function(函数)

-在Lua中,函数被当做值来对待,这表示函数可以存储在变量中,可以通过参数传递给其他函数,也可以作为其他函数的返回值

-Lua既可以调用自身Lua语言编写的函数,又可以调用以C语言编写的函数

-Lua所有的标准库都是C语言写的

userdata(自定义类型)

-userdata用于表示一种由应用程序或C语言库创建的新类型。由于userdata类型可以将任意的C语言数据存到Lua变量中,在Lua中,这种类型没有太多的预定义操作,只能进行赋值和相等性测试。

thread主要用于“线程”。

未完待续。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: