lua basic

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
posted @ 2021-06-02 20:01  Smah  阅读(91)  评论(0编辑  收藏  举报