lua學習之表示式篇

2021-10-02 18:47:29 字數 4070 閱讀 2369

表示式用於表達值

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是作引用...