上次已經學習了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 )
endipairs是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 ,這兩個語句用於跳出當前的塊,比較簡單,不用多說了。
今天先到這裡,明天繼續。
C語言學習總結(五) 表示式和語句
表示式由運算子和運算物件組成,在c語言中每個表示式都有乙個值。c把末尾加上乙個分號的表示式都看作是一條語句。復合語句是用花括號括起來的一條或多條語句,復合語句也稱塊 block 涉及兩種型別的運算,兩個值會被分別轉換成兩種型別的更高階別。目標型別是無符號整型,且待賦的值是整數時,額外的位將被忽略。通...
lua學習之表示式
3.1 算術運算子 二元運算子 加減乘除冪 一元運算子 負值 這些運算子的運算元都是實數。3.2 關係運算子 如果兩個值d型別不同,則不等 lua通過引用比較tables,userdata,functions,也就是當且僅當表示同乙個物件時才相等。3.3 邏輯運算子 and or not a and...
Lua學習之 3 表示式
二元運算子 一元運算子 負值 運算元都是實數 操作返回false或true。和 比較兩個值,如果兩個值型別不同,這二者不同。nil只和自己相等。lua通過引用比較table userdata functions。即當且僅當兩者表示同乙個物件時相等。and or not。邏輯運算子認為false和ni...