核心函数教程 |
|
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