lua basic

摘要:
assertcondition为nil或false,报错。在有错误时,pcall返回false加错误消息。xpcall再pcall的基础上增加了了一个错误处理函数,错误处理来自error()和assert()print()标准输出rawequal在不触发任何元方法的情况下检查v1是否和v2相等。相当于C语言检查两个指针是否指向同一个地址,两个数值完全相等的table,也会返回false。

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

免责声明:文章转载自《lua basic》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CNN网络的基本介绍(二).net mvc使用FlexPaper插件实现在线预览PDF,EXCEL,WORD的方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TableCache设置过小造成MyISAM频繁损坏 与 把table_cache适当调小mysql能更快地工作

 来源: 前些天说了一下如何修复损坏的MyISAM表,可惜只会修复并不能脱离被动的境地,只有查明了故障原因才会一劳永逸。如果数据库服务非正常关闭(比如说进程被杀,服务器断电等等),并且此时恰好正在更新MyISAM表,那么发生损坏的概率就比较大。今天我要说的是另一种情况:频繁的打开关闭MyISAM表文件造成MyISAM表损坏。什么时候会出现频繁的打开关闭My...

第4章 数据库安全性 | 数据库知识点整理

第4章 数据库安全性 了解 计算机系统安全性问题 数据库安全性问题 威胁数据库安全性因素 掌握 TCSEC和CC标准的主要内容 C2级DBMS、B1级DBMS的主要特征DBMS提供的安全措施 用户身份鉴别、自主存取控制、强制存取控制技术 视图技术和审计技术 数据加密存储和加密传输 使用SQL语言中的GRANT语句和REVOKE语句来实现自主存...

详细介绍MySQL/MariaDB的锁

官方手册:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html 1.事务提交的方式 在MariaDB/MySQL中有3种事务提交的方式。 1.显式开启和提交。 使用begin或者start transaction来显式开启一个事务,显式开启的事务必须使用...

创建cocos2dx lua 工程

-- 引擎版本 coco2dx 3.1.1 引擎的创建过程实际上从 hellolua 复制了一份出来,然后更改包名,路径名。 需要注意的是,通过命令行build的时候每次都会复制一堆脚本出来,这其中包含错误文件。需要将源头改正确 -- 重新创建工程过程记录 1.创建工程 cocos new chuanqi -p com.game.chuanqi -l l...

Nginx使用Lua脚本加解密RSA字符串

本文主要介绍使用Lua脚本对采用RSA加密后的字符串进行解密的过程。 使用第三方类库lua-resty-rsa,参考地址:https://github.com/spacewander/lua-resty-rsa 下载并安装第三方依赖库 # Redis集群连接库依赖RSA加解密第三方依赖库[lua-resty-rsa],因此需要提前安装此第三方依赖库 #...

extremeComponents(ec)源码分析

eXtremeComponents(简称ec)是一系列提供高级显示的开源JSP定制标签,当前的包含的组件为eXtremeTable,用于以表形式显示数据。 其本质是jsp的自定义标签,抓住这一点就抓住了ec的本源。 1. Table定义 我们先看一下标签的定义:extremComponents.tld,其中table的标签定义如下: <t...