悉野小楼

导航

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

function msg(...)
    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=250.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 234
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 = 123
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, 就是本文件的全局变量

GLshader的lua学习笔记

 

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字节整数

 

posted on 2012-02-09 17:43  悉野  阅读(715)  评论(1编辑  收藏  举报