Lua 筆記 型別與值

2021-09-23 19:54:15 字數 2896 閱讀 7477

lua是一種動態型別的語言。

在lua中有8種基礎型別:nil(空)、boolean(布林)、number(數字)、string(字串)、userdata(自定義型別)、function(函式)、thread(執行緒)和table(表)。

print(type("hello world")        -->string

print(type(10.2*3))              -->number

print(type(print))               -->function

print(type(type))                -->function

print(type(true))                -->boolean

print(type(nil))                 -->nil

print(type(type(x)))             -->string,與x無關,因為type函式總是返回乙個字串

print(type(a))                   -->nil,因為a尚未初始化

a = print                        -->這是合法的!

a(type(a))                       -->function

lua的字串和其他lua物件一樣,都是自動記憶體管理機制所管理的物件。這表示無須擔心字串的分配和釋放。

lua字串中的轉義序列:

\a        -->響鈴

\b        -->退格

\f        -->提供**

\n        -->換行

\r        -->回車

\t        -->水平tab

\v        -->垂直tab

\\        -->反斜槓

\"        -->雙引號

另外,還可以用一對匹配的雙方括號來界定乙個字母字串,以這種形式書寫的字串可以延伸多行,lua不會解釋其中的轉義序列。例如:

page = [[

......

]]

lua提供了執行時的數字與字串的自動轉換。在乙個字串上應用算術操作時,lua會嘗試將這個字串轉換成乙個數字:

print("10" + 1)        -->11

print("hello" + 1)     --錯誤,不能轉換"hello"

在lua中," .. "時字串連線操作符,當直接在乙個數字後面輸入它的時候,必須要用乙個空格來分隔它們,不然,lua會將第乙個點理解為乙個小數點,可以利用這個特性將數字轉換成字串(最好不要用):

print(10 ..20)        -->1020

line = io.read()        -->讀取一行

n = tonumber(line)      -->嘗試將它轉換為乙個數字

print(tostring(10) == "10")        -->將乙個數字轉換成字串

在lua 5.1中,可以在字串前放置操作符」#「來獲得該字串的長度:

a = "hello"

print(#a)        -->5

print(#"world")        -->5

table(表)型別實現了「關聯陣列」,「關聯陣列「是一種具有特殊索引方式的陣列。table沒有固定大小,可以動態地新增任意數量的元素到乙個table中。它可以表示普通陣列、符號表(symbol table)、集合、記錄、佇列和其他資料結構。在lua中,table既不是」值「,也不是」變數「,而是」物件「。

a = {}            -->建立乙個table,並將它的引用儲存到a

k = "x"

a[k] = 10         -->新條目,key="x",value=10

a[20] = "great"   -->新條目,key=20,value="great" 

print(a["x"])     -->10

k = 20

print(a[k])       -->"great" 

a["x"] = a["x"] + 1        -->遞增條目"x"

print(a["x"])     -->11

a = {}

a["x"] = 10

b = a            -->b與a引用了同乙個table

print(b["x"])    -->10    

b["x"] = 20

print(a["x"])    -->20

a = nil          -->現在只有b還在引用table

b = nil          -->再也沒有對table的引用了

a.x = 10        -->等同於a["x"] = 10

print(a.x)      -->等同於print(a["x"])

在lua中,陣列通常以1作為索引的起始值。長度操作符"#"用於返回乙個陣列或線性表的最後乙個索引值(或為其大小),例如:

--列印所有的行

for i=1, #a do

print(a[i])

end

在lua中,函式(function)是作為「第一類值」來看待的。這表示函式可以儲存在變數中,可以通過引數傳遞給其他函式,還可以作為其他函式的返回值。

a = "jacedy"

print("i'm " ..a)

a = 10

print("a is " ..a)

LUA型別與值

lua是一種動態型別語言,語言中沒有型別定義的語法,每個值都攜帶有自身的型別資訊。lua中有8個基礎型別 nil 空 boolean 布林值 number 數字 string 字串 table 表 function 函式 userdata 自定義型別 和thread 執行緒 用type函式可以返回其...

Lua學習筆記之型別與值

基礎介紹 lua是一種動態型別的語言。在語言中沒有型別定義的語法,每個值都帶有其自身的型別資訊。在lua中有8種基本型別,分別是 nil 空 型別 boolean 布林 型別 number 數字 型別 string 字串 型別 userdata 自定義型別 function 函式 型別 thread...

(二)Lua型別與值

lua有八種基礎型別 nil 空 boolean 布林 number 數字 string 字串 userdata 使用者自定義 function 函式 thread 執行緒 and table 表 nil是一種型別,他只有nil乙個值,相當於無效值。全域性變數在第一次賦值前預設值就是nil,也就是說...