核心函數教程

lua-users home
wiki

此頁面涵蓋參考手冊的第 5.1 節。[1] 這些函數提供了對 Lua 核心功能的訪問。我們不會在此處詳細介紹所有主題,但會提及指向教程其他部分的連結以獲取更多詳細信息。

assert(test, [message])

assert [2] 類似於 C 語言中的 assert() 函數。如果測試條件為 falsenil,則會引發錯誤;否則會返回測試值。引發的錯誤中包含一個可選的用戶定義消息。另請參閱 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 的第二個返回值中的消息引發錯誤。

collectgarbage(opt [, arg])

TODO: [3]

dofile(filename)

TODO: [4]

error(message [, level])

TODO: [5]

_G

_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() 來更改環境。

getfenv(f)

TODO: [7]

getmetatable(object)

TODO: [8]

ipairs(t)

TODO: [9]

load(func [, chunkname])

TODO: [10]

loadfile(filename)

TODO: [11]

loadstring(string [, chunkname])

TODO: [12]

module(name [, ...])

TODO: [13]

next(table [, index])

TODO: [14]

pairs(t)

TODO: [15]

pcall(f, arg1, ...)

TODO: [16]

print(e1, e2, ...)

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

rawequal(v1, v2)

TODO: [18]

rawget(table, index)

TODO: [19]

rawset(table, index, value)

TODO: [20]

require(packagename)

TODO: [21]

select(index, ...)

TODO: [22]

setfenv(f, table)

TODO: [23]

setmetatable(table, metatable)

TODO: [24]

tonumber(e [, base])

TODO: [25]

tostring(e)

tostring [26] 將其參數(如果有多個參數,則僅轉換第一個參數)轉換為字符串並返回該字符串。print 是使用 tostring 實現的,因此您可能已經熟悉輸出格式。簡單值(數字、字符串、布林值和 nil)的轉換方式可能與您預期的一樣。表、用戶數據和線程將打印為“table:”、“userdata:”或“thread:”,後跟內部解釋器對象的地址(絕不應依賴該地址)。

請注意,與 print 不同,tostring 不會打印任何內容,它只是將其參數轉換為字符串並返回它。

tostring 的行為是可擴展的。如果要轉換的值的元表中有一個 __tostring 條目,則會使用要轉換的值調用該條目,並返回該調用的結果。這允許您通過為(某些)表提供一個包含執行所需轉換的 __tostring 函數的元表來更改 tostring 對其的操作方式。

type(v)

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(list)

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

直接從手冊中可以看出,_VERSION [29] 是一個“全局變量(不是函數),它包含一個字符串,其中包含當前解釋器的版本”。

> = _VERSION
Lua 5.1

xpcall(f, err)

TODO: [30]

最近更改 · 偏好設定
編輯 · 歷史記錄
上次編輯時間:格林尼治標準時間 2016 年 8 月 11 日晚上 9:48 (差異)