lua

lua protobuf 使用整理(二)

最近写了一个函数, table自动编码为protobuf格式

local parse
parse = function(args, msg)
    for k, v in pairs(args) do
        if type(v) == 'table' then --table类型判断是否是数组
            if #v > 0 then
                for index, ele in ipairs(v) do --遍历数组元素
                    if type(ele) == 'table' then --数组元素是table, 递归解析内容
                        local emsg = msg[k]:add()
                        parse(ele, emsg)
                    else --数组元素是基本数据类型,直接添加
                        msg[k]:append(ele)
                    end
                end
            else --非数组,递归解析内容
                parse(v, msg[k])
            end
        else
            msg[k] = args[k]
        end
    end
end

lua protobuf 使用整理(一)

准备工作

使用源码A,protobuf-master/python,运行以下命令:

    python setup.py build
    python setup.py test
    python setup.py install

注意:xxx.proto文件必须为UTF-8格式

生成proto_pb文件

cd %~dp0
set PROTO_FILE_FOLER=XXXX
set OUTPUT_FOLDER=XXX

cd %PROTO_FILE_FOLER%
for %%i in (*.proto) do (    
"%~dp0protoc.exe" --plugin=protoc-gen-lua="%~dp0run_plugin.bat" --lua_out=%OUTPUT_FOLDER% %%i 
echo %%i successfully converted
) 
run_plugin.bat
@python "%~dp0protoc-gen-lua-master\plugin\protoc-gen-lua" 

VSCode 修改lua文件默认扩展名以支持高亮和忽略.meta文件

我们项目中的lua文件的扩展名为.lua.bytes,可以通过如下设置实现代码高亮

{
    "files.associations":{
        "*.lua.bytes": "lua"
    },
    "files.exclude": {
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/.DS_Store": true,
        "**/*.meta": true
    }
}

Lua分割字符串

--按照指定符号分割字符串
function strSplit(str, symbol)
    local t = {}
    --按照symbol分割字符串
    for w in string.gmatch(str,"([^'" .. symbol .. "']+)") do
        table.insert(t, w) 
    end
    return t
end

lua中pairs()函数和ipairs()函数的用法

tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = "dos"}
for key, value in ipairs(tbl) do
    print(key, value)
end
for key, value in pairs(tbl) do
    print(key, value)
end

pairs()函数基本和ipairs()函数用法相同.
区别在于

  • pairs()可以遍历整个table, 即包括数组及非数组部分.

  • ipairs()函数用于遍历table中的数组部分.

pairs迭代输出如下:

1 alpha
2 beta
one uno
two dos

ipairs迭代输出如下:

1 alpha
2 beta