dolocal a1 = 10local a2 = 10end -->a1和a2的作用域到此结束
if op == "+" thenr = a + belseif op == "-" thenr = a - belseif op == "*" thenr = a * belseif op == "/" thenr = a / bend
while a > 0 doa = a - 1-- Do something elseend
repeatstatements;until conditions;
function foo(a, b, c)local sum = a + breturn 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)returnstring.lower(a) "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)) --> ai = 99; print(string.char(i, i+1, i+2)) --> cdeprint(string.byte("abc")) --> 97print(string.byte("abc", 2)) --> 98print(string.byte("abc", -1)) --> 99
print(string.format("pi = %.4f", PI))--> pi = 3.1416d = 5; m = 11; y = 1990print(string.format("%02d/%02d/%04d", d, m, y))--> 05/11/1990tag, title = "h1", "a title"print(string.format("%s%s>", tag, title, tag))-->
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= {}
whiletrue do
local nFindLastIndex=string.find(szFullString,szSeparator,nFindStartIndex)
if notnFindLastIndex 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
returnnSplitArray
end
--类似PHP中的Trim函数,用来去掉字符串两端多余的空白符(white Space)
function trim(s)
return(string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
--延时函数,有点猥琐的实现,利用系统的ping的延时
functionsleep(n)
ifn>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就是2print(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) doprint(v)endprint("=======")-- 修改为降序排序table.sort(tb, function (a, b) if a > b then return true end end)for _, v in ipairs(tb) doprint(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) - 返回当前用户机器上的时间.