lua学习测试脚本
function msg(...) -- 可变参数转表方法1 local arg = table.pack(...) print(arg[1], arg[10]) -- 可变参数转表方法2 local tab = {...} print(tab[2]) -- 可变参数数量 local n = select('#', ...) print('num:', tostring(n)) print(nil or 1, false and 3, 5 and 6) end msg(12,52,25,21)
12 nil
52
num: 4
1 false 6
for i, j in pairs({...}) do
print(i, j)
end
end
msg(10,20,30)
--[[
1 10
2 20
3 30
]]--
tt ={
1,2,3,
["20"] = "200",
Age = 20 ,
["Age"] = 30,
ddr =
{
test = 1,
test2 = 3
}
}
tt.JOne = {Gender = "男", age = "28"}
print(type(tt["20"]).."10".."\n"..tt["JOne"]["Gender"])
print(tt.Age)
local a = 3 and 4 or 5;
print(5%3)
--[[注释]]--
while a > 0
do
print(a, not(a~=b))
a = a - 1
end
for c=2, 5, 0.5
do
print(c)
end
print((c or 1).."\f")
html = [[
<html>
<head>
<title>testPage</title>
</head>
<body>
something
</body>
</html>
]]
print(html)
--可返回多结果
function s()
return 2, 3, 4
end
print(s())
--面向对象
t =
{
age = 13,
gender = "male",
add = function(sel, n)
return sel.age + n
end
}
print(t.add(t, 12))
print(t:add(12)) -- 与上面一个函数等价 t:function(data) <==> t.function(t, data)
a,b,c = 1, 2, 3
if a > b then
print(a)
elseif a > c then
print(b)
else
print(c)
end
repeat
print(c)
c = c - 1
until c ~= 2
GLshader
local function t1() test = 5 end t1() print(tostring(test))
输出:5, test前面没加local, 就是本文件的全局变量
os.Date("%Y-%M-%d %H:%M:%S") 格式化显示时间, os.Date也可以不用参数, 就是默认输出
Y可以换成y, 这样就是两位的年份
local config = {}
local tmp = config["a"] or "emtpty"
local times = user_data["times"] or 0
or的左边为空, 会返回右边的表达式
os.time() 返回时间戳
lua同一个变量名,可以改变类型
function sendToPlayer(player, msg) if type(player) == 'table' then -- 如果player是表格, 把player赋值为整数 player = player.id end print(player) end sendToPlayer({id=5}, 'hello5') sendToPlayer(6, 'hello6')
-- lua正则表达式例子, 按.分割成模型与方法 -- 参考:https://www.lua.org/manual/5.4/manual.html#6.4.1 local func = "mail.getUserMailList" local module, method = func:match "([^.]*).(.*)" -- 下面两种写法与上面一样 -- local module, method = func.match(func, "([^.]*).(.*)") -- local module, method = string.match(func, "([^.]*).(.*)") print (module, method) -- 输出 mail getUserMailList -- string.pack, 把数字改成二进制的字符串(除了>大端或<小端), 前面有几个字母, 后面跟几个数字 -- 参考:https://www.lua.org/manual/5.4/manual.html#6.4.2 -- B:an unsigned byte (char) H: an unsigned short (native size) L: an unsigned long (native size) local str = string.pack(">BHB", 1,2,3) --str的值为'\1\0\2\3' local result = string.pack(">s4","hello") -- result '\0\0\0\5hello' -- pack > 表示按大端顺序。s4 字符串转成二进制后, 在前面补个4字节无符号整数, 用来表示字符串的长度, 一般网络中用s2, 两个字节, 16位无符号整数, 可以表示65535长的字符 -- local orgin = string.unpack(">s4",result) local data = string.pack(">I4", 123456) -- 打包一个无符号4字节整数