上次已经学习了Lua的基本语法,今天开始学习表达式。
表达式用于表示值。Lua的表达式中可以包含数字常量、字面字符串、变量、一元和二元操作符及函数调用。另外,有别于传统的是,表达式中还可以包括函数定义(匿名函数或闭包)和table构造式。
一、首先,熟悉一下各种操作符:
1.算术操作符:+、-、*、/、%、- (负号)和 ^ (指数), Lua比其他语言多了一个指数运算符,其他都一样。
2.关系操作符:< > <= >= == ~= , 和其他语言( != )不同的是不“不等于”。运算结果都是true或false。
3.逻辑操作符:and or not 。and和or都使用“短路求值(short-cut evaluation),也就是说,它们只会在需要时才去评估第二个操作符,而且它们的结果与其他语言截然不同:
and --> 如果它的第一个操作数为假,就返回第一个操作数,否则就返回第二个操作数;
or -----> 如果它的第一个操作数为真,就返回第一个操作数,否则就返回第二个操作数;
not相当于C中的非(!),结果是true或false。
注意:Lua中的假只有2种-----> false 和 nil , 其他值都是真。其他语言一般有四大假:0,false,nul,‘\0’。特别注意Lua中的0是真,这点区别很大。
想一想:C语言中的三目运算符 ?: 怎么表达 ?
还有一个字符串连接符 .. 前面已经接触到了。
二、语句
和其他语言类似,无非是一些赋值语句,条件语句,循环语句等,这都很简单,只是格式上有一些区别而已。
1. 赋值语句
赋值(assignment)的基本含义是修改一个变量或者一个table中字段的值,但是Lua中的赋值有一些额外的不同:可以多重赋值,也就是一次将多个值赋给多个变量,各变量或值用逗号分隔。
a, b = 10, "hello"
a, b, c = 0, 1, 2
a, b, c = 0, 1 -----> c没有赋值,c = nil
a, b = 0, 1, 2 -------> 2 没有变量接收,被忽略
a, b = b, a ------> 想想这是什么意思 ?
2. if 条件选择语句
if a < 0 then
a = 0
end
嵌套的if语句:
if a and b then
print(a)
elseif c and d then
print(c)
elseif e or f then
print(e)
else
print("nothing")
end
3.while 循环:先判断条件,再执行循环体
local i = 1
while a[ i ] do
print ( a[ i ] )
i = i + 1 ----> Lua 中没有++、-- 运算符
end
4.repeat-until 语句,一直执行循环体,直到条件满足时结束
repeat
line = io.read()
until line ~= " "
print ( line )
5.for 循环语句,有两种:数字型for(numeric for)和泛型for(generic for)
数字型for:
for var = start,end,step do
<循环体>
end
泛型for:通过一个迭代器(iterator)函数来遍历所有值:
for i, v in ipairs( a ) do
print( v )
end
ipairs是Lua基础库中提供的用于遍历数组的迭代器函数,还有一个迭代table元素的函数pairs。其实,数组也是用table表示的:
a = {1,2,3,4,5,6,7}这就是数组,用ipairs ( a ) 可以遍历所有元素
b = { “one” = “windows”,“two” = “ Unix ”,“three” = “ Mac ” }这就是table,用pairs ( b ) 可以遍历所有元素;
c = {1,2,3,4,5,6,7,“one” = “windows”,“two” = “ Unix ”,“three” = “ Mac ” }这是table,但其中有数组元素,此时用pairs 和 ipairs 遍历就不同了,如此一来就能区别两者的不同之处。
6. break 和 return ,这两个语句用于跳出当前的块,比较简单,不用多说了。
今天先到这里,明天继续。