核心函数教程

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])

待办事项:[3]

dofile(filename)

待办事项:[4]

error(message [, level])

待办事项:[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)

待办事项:[7]

getmetatable(object)

待办事项:[8]

ipairs(t)

待办事项:[9]

load(func [, chunkname])

待办事项:[10]

loadfile(filename)

待办事项:[11]

loadstring(string [, chunkname])

待办事项:[12]

module(name [, ���])

待办事项:[13]

next(table [, index])

待办事项:[14]

pairs(t)

待办事项:[15]

pcall(f, arg1, ...)

待办事项:[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)

待办事项:[18]

rawget(table, index)

待办事项:[19]

rawset(table, index, value)

待办事项:[20]

require(packagename)

待办事项:[21]

select(index, ...)

待办事项:[22]

setfenv(f, table)

待办事项:[23]

setmetatable(table, metatable)

待办事项:[24]

tonumber(e [, base])

待办事项:[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 GMT (差异)