表示式用於表達值
lua 中表示式可以為數字常量,自變字串,變數,一元和二元操作符,函式呼叫、函式定義、table 構造式
一元操作符-用於負號/^
%-用於減法
x ^ 0.5
x ^ (-1 / 3) -- x 的三次方再求導
10 % 3 = 1 -- 餘數計算
x % 1 -- 得到的是 x 的小數部分
x - x % 1 -- 得到的是 x 的整數部分
x - x % 0.01 -- 對幾位小數進行取餘,就得到幾位小數 整數
返回得到的結果都是布林值,非真即假
<
>
<=
>=
== 相等性測試
~= 不等性測試,兩個值具有
== 和 ~= 可用於任何的兩個值
如果兩個值具有不同的型別,lua 就認為它們是不相等的
nil 值與自身相等
print(nil == nil)
對於 table, userdata, function ,lua 是做引用比較的,當他們引用同乙個物件的時候,他們才是相等的。
a = {}
a.x = 1
a.y = 0
b = {}
b.x = 1
b.y = 0
c = a
print(type(a == b))
print(type(a == c))
比大小的關係操作符,可以對數字和字串進行比較。
在 lua 按照字母的次序對字串進行比較
不同型別的值比較,字元0與數字0是不同的
將數字和字串比較時,lua 會報錯
與條件控制語句一樣,所有的邏輯操作符將 false, nil 視為假,其他所有型別視為真
and第乙個運算元為假就返回第乙個運算元
否則返回第二個運算元
print(2 and 4) -- 2
print(nil and 4) -- nil
print(false and 4) -- false
print(4 and false) -- false
or第乙個運算元為真就返回第乙個運算元
否則返回第二個運算元
print(2 or 4) -- 4
print(nil or 4) -- 4
print(false or 4) -- 4
print(4 and false) -- 4
短路操作只在需要的時候才回去評估第二個運算元
and 和 or 都支援短路操作
-- 習慣寫法1
-- 用於當 x 沒有值時,賦值乙個預設值
print(x=x or v)
-- 等價於
if not x then
x = v
end-- 習慣寫法2
print(a and b or c)
-- 類似 c 語言中 ,a 為真得到 b, 否則就為 c
a ? b : c
-- 習慣寫法3
-- 比較兩個數中的較大者
max = (x > y) and x or y
not只返回乙個值 true 或者 false
print(not nil) -- true
print(not false) -- true
print(not true) -- false
print(not 0) -- false
print(not "0") -- false
print(not not nil) -- false
用兩個點操作符 …
lua 中字串是不可變的值
連線操作符只會建立乙個新的字串,而不會對原字串進行修改
print("a" .. "b")
print("a" .. "12" .. "b")
一級優先^
二級優先not
/-(一元操作符負號)
**優先/%
四級優先
五級優先…(字串連線)
六級優先大於 >
小於 <
大於等於 >=
小於等於 <=
不等於 ~=
等於 ==
七級優先and
八級優先or
在二元操作符中除了 指數運算子 ^ 和連線操作符 …是右結合的,其他所有操作符都是左結合的,可以用括號()顯示指定運算順序
初始化陣列
days = {}
days =
print(days[1]) -- "sunday"
初始化記錄風格的 table
a = -- 等效於 a = {}; a.x = 10; a.y = 20
新增或刪除某個字段
w =
x =
w[1] = "another field"
w.x = nil
鍊錶有一系列節點組成,節點就是元素
節點可以在執行時動態生成
每個節點包括兩部分
儲存資料的資料域
-- 建立鍊錶
list = nil
for line in io.lines() do
list =
endlocal l = list
while l do
print(l.value)
l = l.next
end
使用記錄方式的建立 鍊錶 混合使用不能使用負數作為索引
不能用運算子作為欄位名
polyline = ,
,}print(polyline[2].x) -- -10
print(polyline["color"]) -- "blue"
顯式初始化索引值
opnames =
i = 20; s = " "
a =
print(opnames[s]) -- add
print(a[22]) --
-- 等效於
-- 等效於
-- 不建議以 0 作為索引,因為 lua 中很多函式都假設陣列起始索引是從1開始的
-- 最後乙個元素後的逗號是可選的,合法的
-- 可以在構造式中用分號代替逗號
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...
Lua學習(二)表示式
1 算數操作符 指數運算 x 2 x的平方 x 0.5 x的評分根 取模 求餘 運算,定義如下 a b a math.floor a b b x 1 x的小數部分 x x 1 x的整數部分 x x 0.01 x精確到小數點後兩位 2 關係操作符 對於table,userdata和函式,lua是作引用...