全局变量。Lua自己不使用这个变量。改变它的值不会影响任何环境。
全局变量(不是一个函数),存储当前Lua版本号。当前这个值是”Lua5.2”
Lua提供一个注册表,一个预定义表C代码可以使用它来存储Lua值.这个注册表
总是使用伪索引LUA_REGISTRYINDEX来定位.C代码可以存储数据进入该表.
但是要小心选择键值不要和其他库冲突.典型的你能将你的库名包括在键值名称中.
或者一个轻量userdata的C地址.
整数键值在注册表中被用在引用机制中.有辅助库实现.
当你创建一个新的Lua state时,注册表中包括一些预定义的值.这些预定义值
是一些索引值它们包括在lua.h中.下面包括这些定义:
LUA_RIDX_MAINTHREAD main thread的state的索引.
LUA_RIDX_GLOBALS 全局环境的索引
如果v是false assert引发一个错误,否则返回全部参数message是错误消息。
message默认值是”assertion failed!”
该函数是一个通用垃圾回收器。它根据第一个参数执行不同的回收策略。
”collect” 执行完整的垃圾回收周期。默认操作。
“stop” 停止自动垃圾回收直到重新启动它。
“restart” 重启自动垃圾回收。
“count” 返回Lua总的内存使用数量(kb)
k,b = collectagarbage(“count”)
assert(k*1024==math.floor(k)*1024+b)
“step” 执行一个垃圾回收step。step”size”由arg指定。
如果完成收集周期返回true。
“setpause” 设置收集器pause参数新的值,返回以前的值。
“setstepmul” 设置收集器multiplier新的值,返回以前的值。
“isrunning” 判断收集器是否在运行。
“generational” 试验型功能。
“incremental” 垃圾回收器进入增量模式,这是默认模式。
打开文件并且执行包含的Lua |chunk|。如果没有参数就从标准输入读取chunk。
返回全部执行结果。发生错误dofile传播错误到他的调用者(dofile没有运行
在保护模式)
终止最近的保护函数调用并且返回message作为错误信息,函数error不会返回。
如果message是一个字符串,通常加入错误发生的位置的信息在message的开始部分。
level错误发生的位置默认为1,1表示错误发生在调用error的函数中。2代表
错误发生在调用error的函数的调用者那里。
如果object没有一个元表(metatable)返回nil。如果ojbect的元表有”_metatable”
项,返回相关的值。否则返回对象的元表(metatable)。
如果t有元方法__ipairs,用t作为参数调用它,将返回三个结果。
否则,返回三个值:一个iterator函数,table t,和0。
for i,v in ipairs(t) do body end
将遍历t,(1,t[1]) ,(2,t[2]),…
泛型for等价于一下代码
for var_1,…,var_n in do end
等价于
local _f,_s,_var =
while true do
local var_1,…,var_n = _f(_s,_var)
_var = var_1
if _var==nil then break end
end
end
类似于|load|,但是从文件filename或者从标准输入中取得|chunk|。如果没有给定文件
名将从标准输入中取得|chunk|。
如果ld是一个字符串直接装入|chunk|,|chunk|来自于这个字符串。如果ld是一个函数,
|load|反复调用它取得|chunk|片段。每次调用、ld必须返回一个和上次串联的字符串
。返回空字符串或者nil读取结束。
如果没有语法错误,返回编译的chunk作为一个函数。否则返回nil加错误信息。
如果导致函数有|upvalues|,第一个upvalue被设置为全局变量或者env,当装入
main chunk,第一个upvalue将是|_ENV|变量。
可选参数source被作为错误信息或者调试信息使用。缺省为ld,如果ld是一个字符串,
或者其他情况”=(load)”。
字符串mode 控制是否chunk能是文本或者二进制(预编译chunk)。可能的字符串’b’
(二进制chunks),’t’(文本chunks),或者”bt”(混合方式)。默认是”bt”
lua将chunk当成一个无名函数,因此chunk可以定义局部变量,接收参数和返回.该无名函数被
编译进一个叫扩展局部变量_ENV内._ENV将作为该无名函数的upvalue.
chunk可以存储在一个文件或者字符串中.执行chunk时Lua先将chunk预编译为Lua虚拟机指令.
chunk也能编译为二进制,见luac.
允许程序遍历整个表。第一个参数是一个表格,第二个参数是表格的一个索引。next返回
表的下一个索引和关联的值。当第二个参数使用nil,next返回初始索引和它关联的值。
当使用最后一个索引调用next或者表是空的,next返回nil。如果缺少索引参数,默认传
入nil。你也能用next(t)来检测表是不是为空。
next不能保证顺序遍历,即使是一个数值表。(想顺序遍历,使用数值for)
如果t有元方法__ipairs,用t作为参数调用它,将返回三个结果。
否则返回上个值:|next|函数,表格t,和nil。 >
for k,v in pairs(t) do body end
将枚举全部key-value对
在保护模式下使用给定的参数调用函数f。这以为着一些f函数内部的错误不会传播,相反
pcall俘获错误和返回状态code。它的第一个返回值是状态code(a boolean)。如果是
true调用成功没有错误,在这种情况下pcall也返回全部f返回值在状态code后面。有错误
发生时pcall返回false加一个错误信息。
接收多个参数打印它们的值到标准输出,使用|tostring|函数将每一个参数转换为字符串。
print没有义务进行格式化输出,仅仅简单的显示这些值,用于实例调试。为了完整的控制
输出,使用|string.format|和|io.write|。
检查v1是否等于v2,不调用元方法。返回一个boolean。
取得真正的table[index],不调用元方法。table必须是一个表。
返回对象v的长度,v必须是一个表或者字符串,不调用元方法。返回一个整数。
设置真正table[index]的值为value,不调用元方法。table必须是一个表,index不能是nil
和NaN,value是一个Lua值。
函数返回table。
装入一个给定模块。这个函数开始查找|package.loaded|表确定modname是否已经被加载。
如果已经加载,函数直接返回存储在其中的值package.loaded[modname]。否则它试着为这个
模块查找一个loader。require使用package.searchers序列来查找loader。通过改变这个序
列,我们可以改变require加载方式。下面的解释基于默认配置的|package.searchers|。
首先require查询package.preload[modname]获得以loader(函数)。没找到的话require
搜索|package.path|中的路径。如果也失败,require在|package.cpath|中查找C loader。
如果还是失败的话require尝试|package.searchers|。
一旦loader被找到,require调用loader使用两个参数:modname和一个扩展值(如果loader
来自于一个文件扩展值是文件名)。如果loader返回一个non-nil值,require将这个值赋于
package.loaded[modname]。如果没有non-nil返回将不进行赋值操作,然后require给入口赋
true。在这中情况require最终返回package.loader[modname]。
如果在转载中有错误发生,或者如果没有找到loader,require将抛出错误。
这个过程的等价伪代码: >
function require(modname)
if not package.loaded[modname] then
local loader = findloader(modname)
if loader == nil then
error(“unable to load module “..modname)
end
package.loaded[modname] = true
local res = loader(modname)
if res ~= nil then
package.loaded[modname] = res
end
end
return package.loaded[modname]
end
如果index是一个数值,返回变参中第index个后的全部参数。index可以是负数索引例如-1
表示最后一个。index还可以是字符串”#”,select返回全部参数的个数。
select(3,’h’,’e’,’l’,’l’,’o’)
返回’l’,’l’,’o’
select(-2,’h’,’e’,’l’,’l’,’o’)
返回’l’,’o’
select(‘#’,’h’,’e’,’l’,’l’,’o’)
返回5
设置表的元表。(你不能改变Lua其他类型的元表)如果元表是nil,删除存在的元表。如果
原来的元表有方法”__metatable”,抛出错误。
函数返回table。
当调用没有使用base时,tonumber试着将参数转换成数值。如果参数已经是一个数值直接
直接返回。如果不能转换返回nil。
When called with base, then e should be a string to be interpreted as an integer
numeral in that base. The base may be any integer between 2 and 36, inclusive.
In bases above 10, the letter ‘A’ (in either upper or lower case) represents 10,
‘B’ represents 11, and so forth, with ‘Z’ representing 35. If the string e is not
a valid numeral in the given base, the function returns nil.
将任意的lua值v转换为一个合理的字符串。如果v的元表中有方法”__tostring”,那么
tostring将使用v作为参数调用它,并且返回函数的结果。
返回参数的类型,返回值是一个字符串。可能是下面中的一个”nil”,”string”,”boolean”,
“table”,”function”,”thread”,和”userdata”
type(“nil”) 将返回”nil”
和|pcall|类似,除了增加一个消息处理器msgh。