1. 程式人生 > >第二章 類型與值 Lua程序設計第二版筆記

第二章 類型與值 Lua程序設計第二版筆記

mod 函數 小數點 tab 數組使用 信息 沒有 spa 基礎類型

--第二章 類型與值
Lua是動態類型的語言,在語言中沒有類型定義的語法,每個值都帶有它自身的類型信息。
8種基礎類型:nil boolean number string userdata function thread table

--2.1nil
--2.2boolean
Lua將false和nil都視為假,除此之外都是真,包括數字零和空字符串。

--2.3number
number表示雙精度浮點數。通過重新編譯Lua也可以使用其他類型來表示數字,具體做法見luaconf.h文件

--2.4string
字符串是不可變的值,不能像C中直接修改字符串中的某個字符,而是應該根據修改要求來創建一個新的字符串。

a = "one string"
b = string.gsub(a, "one", "another")
print(a) --> one string
print(b) --> another string

Lua的字符串和其他Lua對象(table或函數)一樣,都是自動內存管理機制所管理的對象。

Lua提供了字符串和數字的自動轉換

print("10" + 1)  --> 11
print("10+1")  --> 10+1
print(10 .. 20)  -->1020  (註意..接的後面的數字之間要空一格,不然第二個點會理解成小數點)

但是不推薦使用自動轉換,推薦使用tonumber()和tostring()兩個方法

--2.5table
Lua通過table來表示module、package、object。
table既不是值,也不是變量,而是對象。可以將table想象成一種動態分配的對象,程序僅持有一個對他們的引用。
table不能聲明,而是通過構造表達式{}來創建。
table永遠是匿名的,一個持有table的變量和table自身之間沒有固定的關聯性。
當一個程序再也沒有對一個table引用時,Lua的GC最終會刪除該table,並復用它的內存。

把table作為數組使用時,#將返回最後一個索引值。如果數組中間的值有nil,則#會認為這些nil就是數組結尾的標誌。
如果要處理有中間有nil的數組,可由使用table.maxn,返回一個table的最大正索引

a = {}
a[1000] = 1
print(table.maxn(a)) --> 10000

第二章 類型與值 Lua程序設計第二版筆記