核心函數教程 |
|
assert
[2] 類似於 C 語言中的 assert()
函數。如果測試條件為 false
或 nil
,則會引發錯誤;否則會返回測試值。引發的錯誤中包含一個可選的用戶定義消息。另請參閱 error()
函數。例如:
> assert(1==1) -- no error as test was true > assert(1==0) stdin:1: assertion failed! stack traceback: [C]: in function `assert' stdin:1: in main chunk [C]: ? > assert("green"=="blue", "Colours not equal") stdin:1: Colours not equal stack traceback: [C]: in function `assert' stdin:1: in main chunk [C]: ?
許多 Lua 函數(例如 io.open
)在成功時返回一個值,或者在失敗時返回 nil
和一個錯誤消息。這與 assert
配合良好。
file = assert(io.open(filename))
這將打開 filename
以進行讀取並將其賦值給 file
,或者使用 io.open
的第二個返回值中的消息引發錯誤。
_G
[6] 是一個指向全局環境的全局變量。例如,要顯示所有全局變量,我們可以執行以下操作
> table.foreach(_G,print) string table: 00357098 xpcall function: 00354E10 tostring function: 00354708 gcinfo function: 00354E90 loadlib function: 00358B40 os table: 00355AE0 unpack function: 003547C8 level 2 require function: 00354F90 getfenv function: 00354548 ... -- etc.
_G
也是遞迴的,因為 _G
存在於 _G
中!也就是說,以下所有內容都指向同一個表(它保存全局變量)
> = _G table: 00353710 > = _G._G table: 00353710 > = _G._G._G table: 00353710
Lua 本身不使用此變量,因此更改其值不會影響任何環境。您應該使用 setfenv()
來更改環境。
print
[17] 可以傳遞任意數量的以逗號分隔的參數,它會將這些參數的值打印到標準輸出。print
使用 tostring
將參數轉換為字符串形式以進行打印。例如:
> print(1,2,"buckle my shoe", 22/7) 1 2 buckle my shoe 3.1428571428571
print
非常簡單,不會遞迴到打印內容的表中,它只會打印類型和唯一 ID。
> print({1,2,3}) table: 002FE9C8
print
不會格式化文本。為此,您應該將 string.format()
函數與 print
結合使用(請參閱 StringLibraryTutorial)。例如:
> print(string.format("Pi is approximately %.4f", 22/7)) Pi is approximately 3.1429
tostring
[26] 將其參數(如果有多個參數,則僅轉換第一個參數)轉換為字符串並返回該字符串。print
是使用 tostring
實現的,因此您可能已經熟悉輸出格式。簡單值(數字、字符串、布林值和 nil)的轉換方式可能與您預期的一樣。表、用戶數據和線程將打印為“table:”、“userdata:”或“thread:”,後跟內部解釋器對象的地址(絕不應依賴該地址)。
請注意,與 print
不同,tostring
不會打印任何內容,它只是將其參數轉換為字符串並返回它。
tostring
的行為是可擴展的。如果要轉換的值的元表中有一個 __tostring
條目,則會使用要轉換的值調用該條目,並返回該調用的結果。這允許您通過為(某些)表提供一個包含執行所需轉換的 __tostring
函數的元表來更改 tostring
對其的操作方式。
type
[27] 返回一個描述傳遞給它的對象類型的字符串。
> = type(1), type(true), type("hello"), type({}), type(function() end) number boolean string table function
請注意,nil
的類型為“nil”。
> =type(nil) nil
Lua 5.0 中返回的可能類型為:“number”、“string”、“boolean”、“table”、“function”、“thread”和“userdata”。“thread”是一個協程,“userdata”是一個 C 數據類型,在 Lua 中有一個對它的引用。
unpack
[28] 接受列表的元素並返回它們,例如:
> = unpack( {1,2,3} ) 1 2 3 > = unpack( {"one",2,6*7} ) one 2 42
解包的元素數量由表的長度定義,而表的長度不一定等於表中元素的數量!有關這方面的更多詳細信息,請參閱 TableLibraryTutorial。
> t = {"one",2,6*7} > t.n = 2 > = table.getn(t) 2 > = unpack(t) one 2
直接從手冊中可以看出,_VERSION
[29] 是一個“全局變量(不是函數),它包含一個字符串,其中包含當前解釋器的版本”。
> = _VERSION Lua 5.1