核心函数教程 |
|
assert [2] 类似于 C 语言中的 assert() 函数。如果测试条件为 false 或 nil,则会引发错误;否则返回 test。可选的用户定义消息包含在引发的错误中。另外,请参阅 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