Lua常用代码
本文地址:http://tongxinmao.com/Article/Detail/id/164
do
local a1 = 10
local a2 = 10
end -->a1和a2的作用域到此结束
if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a * b
elseif op == "/" then
r = a / b
end
while a > 0 do
a = a - 1
-- Do something else
end
repeat
statements;
until conditions;
function foo(a, b, c)
local sum = a + b
return sum, c --函数可以返回多个值
end
函数可以返回多个值:return a, b, c, ...
注释,单行用(--)来表示;多行用(--[[ ... ]])来标示;
~=(不等于)
print(("1" == 1)) --false
逻辑运算符:and、or、not;逻辑运算符认为false和nil是假(false),其他为真,0也是true.
,a ? b : c ==>>在Lua中可以这样实现: (a and b) or c
print(not nil) --> true
Userdata 嗯,这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针。
在Lua中,字符串的第一个字符的索引是1,但是,索引也可以是负数,表示从字符串的尾部开始计数,
string.len(s) 返回字符串s的长度;
string.rep(s, n) 返回重复n次字符串s的串;你使用string.rep("a", 2^20)可以创建一个1M bytes的字符串(比如,为了测试需要);
string.lower(s) 将s中的大写字母转换成小写(string.upper将小写转换成大写)。如果你想不关心大小写对一个数组进行排序的话,你可以这样:
table.sort(a, function (a, b) return string.lower(a) < string.lower(b) end)
string.upper(s) 将s中的小写字母转换成大写
string.upper和string.lower都依赖于本地环境变量。所以,如果你在 European Latin-1环境下,表达式:
string.upper("a??o") --> "A??O"
string.sub(s,i,j) 函数截取字符串s的从第i个字符到第j个字符之间的串。Lua中,字符串的第一个字符索引从1开始。你也可以使用负索引,负索引从字符串的结尾向前计数:-1指向最后一个字符,-2指向倒数第二个,以此类推。所以, string.sub(s, 1, j)返回字符串s的长度为j的前缀;string.sub(s, j, -1)返回从第j个字符开始的后缀。如果不提供第3个参数,默认为-1,因此我们将最后一个调用写为string.sub(s, j);string.sub(s, 2, -2)返回去除第一个和最后一个字符后的子串。
s = "[in brackets]"
print(string.sub(s, 2, -2)) --> in brackets
print(string.char(97)) --> a
i = 99; print(string.char(i, i+1, i+2)) --> cde
print(string.byte("abc")) --> 97
print(string.byte("abc", 2)) --> 98
print(string.byte("abc", -1)) --> 99
print(string.format("pi = %.4f", PI))
--> pi = 3.1416
d = 5; m = 11; y = 1990
print(string.format("%02d/%02d/%04d", d, m, y))
--> 05/11/1990
tag, title = "h1", "a title"
print(string.format("<%s>%s</%s>", tag, title, tag))
--> <h1>a title</h1>
string.find (s, pattern [, init [, plain]])
gsub(string,pattern,replacement[, limitCount]) - 全局替换
loadstring("Lua code") - 分析字符串中的lua代码块并且将结果作为一个函数返回
strbyte(string[, index]) - 转换字符串为整数值(可以指定某个字符).
strchar(asciiCode[, ...]) - 转换整数为相对应的字符
strfind(string, pattern[, initpos[, plain]]) - 在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置.
strlen(string) - 返回当前字符串的字符数
strmatch(string, pattern[, initpos]) - 与strfind不同的是,macth返回的是具体值,而find返回的是此值的位置
下面的字符串函数是wow独有的
strtrim(string) - 去除字符串前后空格
strsplit(delimiter, string) - 分割字符串
strjoin(delimiter, string, string[, ...]) - 根据定界符将字符串连接起来
\a 响铃 \v 垂直制表符 \b 退格 \\ 反斜杠
\f 换页符 \" 双引号 \n 换行符 \' 单引号
\r 换行符 \[ 左方括号 \t 制表符 \] 右方括号
..在Lua中是字符串连接符。当在一个数字后面写..时,必须加上空格,否则出错。
print(0 .. 1) --> 01
bit.bnot(a) - 返回一个a的补充
bit.band(w1,...) - 返回w的位与
bit.bor(w1,...) - 返回w的位或
bit.bxor(w1,...) - 返回w的位异或
bit.lshift(a,b) - 返回a向左偏移到b位
bit.rshift(a,b) - 返回a逻辑右偏移到b位
bit.arshift(a,b) - 返回a算术偏移到b位
bit.mod(a,b) - 返回a除以b的整数余数
6.1 table 中的每项要求是 key = value 的形式。 省略key时,会自动以1开始编号,并跳过设置过的key。
6.2 key 只能是字符串, 这里的 web, QQ, a, b 都是字符串,但是不能加上引号, 否则出错。
6.3 通过 key 来访问 table 的值,这时候,必须加上引号。
--分割字符串的函数,类似PHP中的explode函数,使用特定的分隔符分割后返回”数组(lua中的 table)“
function Split(szFullString, szSeparator)
local nFindStartIndex = 1
local nSplitIndex = 1
local nSplitArray = {}
while true do
local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)
if not nFindLastIndex then
nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))
break
end
nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)
nFindStartIndex = nFindLastIndex + string.len(szSeparator)
nSplitIndex = nSplitIndex + 1
end
return nSplitArray
end
-- 类似PHP中的Trim函数,用来去掉字符串两端多余的空白符(white Space)
function trim(s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
-- 延时函数,有点猥琐的实现,利用系统的ping的延时
function sleep(n)
if n > 0 then os.execute("ping -n " .. tonumber(n + 1) .. " localhost > NUL") end
end
pcall (f, arg1, ···)
功能:在保护模式下调用函数(即发生的错误将不会反射给调用者)
当调用函数成功能返回true,失败时将返回false加错误信息
22、tonumber (e [, base])
功能:尝试将参数e转换为数字,当不能转换时返回nil。base(2~36)指出参数e当前使用的进制,默认为10进制,如tonumber(11,2)=3
23、tostirng(e)
功能:将参数e转换为字符串,此函数将会触发元表的__tostring事件
24、type(v)
功能:返回参数的类型名("nil","number", "string", "boolean", "table", "function", "thread", "userdata")
25、unpack (list [, i [, j]])
功能:返回指定表的索引的值,i为起始索引,j为结束索引。注:本函数只能用于以数字索引访问的表,否则只会返回nil 如:t={"1","cash"}
3、dofile (filename)
功能:打开并且执行一个lua块,当忽略参数filename时,将执行标准输入设备(stdin)的内容。返回所有块的
返回值。当发生错误时,dofile将错误反射给调用者。注:dofile不能在保护模式下运行。
4、error (message [, level])
功能:终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回)
通常情况下,error会附加一些错误位置的信息到message头部.
Level参数指示获得错误的位置,
Level=1[默认]:为调用error位置(文件+行号)
Level=2:指出哪个调用error的函数的函数
Level=0:不添加错误位置信息
5、_G全局环境表(全局变量)
功能:记录全局环境的变量值的表 _G._G = _G
math.randomseed(os.time())
print(math.random()) -- 输出一个大于等于0,小于1的值
print(math.random(2)) -- 输出不是1就是2
print(math.random(3, 4)) -- 输出不是3就是4
local tb = {10, 20, 30}
table.insert(tb, 40) -- 在table的最后插入,结果为:{10, 20, 30, 40}
table.insert(tb, 2, 15) -- 在table的位置2插入,结果为:{10, 15, 20, 30, 40}
print(table.remove(tb)) -- 删除最后一个元素
-- 默认是升序排序
table.sort(tb)
for _, v in ipairs(tb) do
print(v)
end
print("=======")
-- 修改为降序排序
table.sort(tb, function (a, b) if a > b then return true end end)
for _, v in ipairs(tb) do
print(v)
end
时间:
print(os.time()) -- 输出当前时间的描述
time(table) - 返回从一个unix时间值
print(os.time({year=2014,month=8,day=14}))
函数date是time的一个反函数,它可以将一个表示日期和时间的数字转换成某些高级的表现形式。其第一个参数是格式字符串,指定了期望的表示形式;第二个参数是日期和时间的数字,默认为当前日期和时间
local tbCurrentTime = os.date("*t")
date(format, time) - 返回当前用户机器上的时间.
上一篇:OBD产品深度分析——iVoka MINI X硬件暴力拆解
下一篇:mosquitto服务状态监控