assert(condition)
condition为nil或false,报错。反之正常执行。
collectgarbage(opt, ...)
手动这类GC是一件不太理想的事情,不管什么语言都是这样的,除非设计缺陷万不得已
"collect" # 做一次完整的垃圾收集循环。
"stop" # 停止垃圾收集器的运行。
"restart" # 重启垃圾收集器的自动运行。
"count" # 以 K 字节数为单位返回 Lua 使用的总内存数。
"step" # 单步运行垃圾收集器。 步长大小由 arg 控制。
"isrunning" # 返回表示收集器是否在工作的布尔值。
"incremental" # 改变收集器模式为增量模式。
"generational" # 改变收集器模式为分代模式。
dofile(filename):
打开该名字的文件,并执行文件中的 Lua 代码块。有返回值。
error(message, level):
中止上一次保护函数调用, 将错误对象message返回。 函数error永远不会返回。
__G:
保存全局变量,可以是任何类型。
getmetatable(object)
获取元表,没有为nil,有返回对象
setmetatable(table,metatable)
对指定 table 设置元表(metatable),如果元表(metatable)中存在 __metatable 键值,setmetatable 会失败。
mytable = {} -- 普通表
mymetatable = {} -- 元表
setmetatable(mytable,mymetatable) -- 把 mymetatable 设为 mytable 的元表
getmetatable(mytable) -- 这回返回mymetatable
metatable相关不在这详细展开
ipairs (t)
迭代table中的键值对,以非零自然数为索引,没有找到下一个就会立即中断。
pairs (t)
迭代table中的键值对。
load(chunk, chunkname, mode, env)
加载一个代码块。
chunk可以是字符串也可以是函数
local a = load("return 2")() --参数是一个字符串的时候,是一个函数,它的返回值是2
local b = load(a) --当参数是一个函数的时候,会反复执行a()
loadfile()
加载文件中的代码,不运行代码
require()
加载文件中的代码,并且执行,调用多次也视为被调用了一次,和dofile类似
pcall(f,arg1,arg2,...)
传入参数,以 保护模式 调用函数 f
。 这意味着 f
中的任何错误不会抛出; 取而代之的是,pcall
会将错误捕获到,并返回一个状态码。 第一个返回值是状态码(一个布尔量), 当没有错误时,其为真。 此时,pcall
同样会在状态码后返回所有调用的结果。 在有错误时,pcall
返回 false
加错误消息。
xpcall(function,errorfunction)
再pcall的基础上增加了了一个错误处理函数,错误处理来自error()和assert()
print()
标准输出
rawequal(v1,v2)
在不触发任何元方法的情况下 检查 v1
是否和 v2
相等。 返回一个布尔量。相当于C语言检查两个指针是否指向同一个地址,两个数值完全相等的table,也会返回false。
local a = {2}
local b = {2}
print(rawequal(a,b)) -- false
---------------------------------------
local c = {1}
local a = c
local b = c
print(rawequal(a,b)) -- ture
---------------------------------------
local a = 1
local b = 1
print(rawequal(a,b)) -- ture
---------------------------------------
print(rawequal(1,1)) -- ture
--------------------------------------
function www()
print("ssss")
end
local a = www
local b = www
print(rawequal(a,b)) -- ture
---------------------------------------
function www()
print("ssss")
end
function vvv()
print("ssss")
end
local a = www
local b = vvv
print(rawequal(a,b)) -- false
---------------------------------------
local a = "www"
local b = "www"
print(rawequal(a,b)) -- ture
---------------------------------------
local a = coroutine.create(
function(i)
print(i);
end
)
local b = coroutine.create(
function(i)
print(i);
end
)
print(rawequal(a,b)) -- false
---------------------------------------
function c()
print("w")
end
local a = coroutine.create(c)
local b = coroutine.create(c)
print(rawequal(a,b)) -- false
---------------------------------------
local a = coroutine.create(
function(i)
print(i);
end
)
local b = a
print(rawequal(a,b)) -- ture
rawget(table,key)
获取table中的key对应的value,如果没有返回nil
rawlen(v)
计算数组的数据个数和字符串的长度,不支持table,和#作用相同
rawset(table,key,value)
支持table的key新增、修改和删除
select(vl,...)
lua中有一个...表示不定参数,select第第一个参数是#,表示计算...的数量。第一个参数为3,返回第三个参数,第四个参数...
type (v)
"number"
"string"
"boolean"
"table"
"function"
"thread"
"userdata"
"nil"
_VERSION
返回lua的版本号
tostring()
接收任何类型的值并将其转换为人类可读格式的字符串。 (要完全控制数字的转换方式,请使用 string.format。)
如果 v 的元表有一个 __tostring 字段,则 tostring 以 v 为参数调用相应的值,并将调用结果作为其结果。
local tableA={"A","B","C"}
local tableB={}
tableB.__tostring=function (tab)
local str=""
for k,v in pairs(tab)do
str=str..v..","
end
return str
end
tableA = setmetatable(tableA,tableB)
print(tostring(tableA))
--A,B,C,
tonumber("A",进制)
字符串转数字,进制支持2-36机制
tonumber("A",16) -- 10
next()
next(t) 来检查表是否为空。
使用next便利一个数组
local a={1,2,3,4,5,6,7,8,9,0}
local value
while next(a,value) do
print(next(a,value))
if value == nil then
value = 0
end
value = value + 1
end