本文同步發表於個人網站
Lua只有一個原生的複合結構 -- table
。實際上陣列是table
的特例。
table
的特例arr = {1,2,3,4}
print(type(arr)) --> table
table
)table
對應於:
程式語言 | 型別 |
---|---|
python | dict |
js | object or Map |
這個結構幾乎是現代高階語言必備的基礎。其又稱作hash-table
,是一個鍵值對(key/value)的結構。在Lua之中,其key可以是除了nil
和NaN
(Not a Number)以外的任何型別。
obj = {} -- 建立一個空表
obj[1] = 1 -- 整數是合法的key值
obj[1.0] = 2 -- 浮點數是合法的key值
obj["string"] = 1 -- 字串是合法的key值
obj[math.huge] = 1 -- inf是合法的key值
--[[
要注意的是 obj[1] 和 obj[1.0]相同
其obj[1]和obj[1.0]最終值為2
--]]
----------------
print(obj[nil]) --> nil
obj[nil] = 1 --> Error: nil不是合法的key值,儘管取值不會出錯
print(obj[0/0]) --> nil
print(0/0) --> -nan
obj[0/0] = 1 --> Error: NaN不是合法的key值
其value可以是nil
以外的值。
obj[1] = nil -- 刪除`obj[1]`
print(obj[1]) --> nil --表示obj[1]不存在
除了建立空表,可以使用下面方式初始化table
person = {
["name"] = "Bob",
["age"] = 25,
}
如果是從1開始的連續整數,其行為大體與陣列相同:
arr = {
[1] = 1,
[2] = 2,
[3] = 3,
[4] = 4,
}
如果key值是字串類型,且其開頭不為數字,可以簡化成下面寫法:
person = {
name = "Bob",
age = 25,
}
取值與Python、JS、C很像,使用下標運算:
print(person["name"])
如果是字串key值,可以簡化成:
print(person.age)
實際上對於值類型為function
還有一種語法糖,會在物件導向介紹。