zoukankan      html  css  js  c++  java
  • 关于lua包nil截断的问题

    local unpack = unpack or table.unpack
    
    -- 解决原生pack的nil截断问题,SafePack与SafeUnpack要成对使用
    function SafePack(...)
        local params = {...}
        params.n = select('#', ...)
        return params
    end
    
    -- 解决原生unpack的nil截断问题,SafePack与SafeUnpack要成对使用
    function SafeUnpack(safe_pack_tb)
        return unpack(safe_pack_tb, 1, safe_pack_tb.n)
    end
    
    -- 对两个SafePack的表执行连接
    function ConcatSafePack(safe_pack_l, safe_pack_r)
        local concat = {}
        for i = 1,safe_pack_l.n do
            concat[i] = safe_pack_l[i]
        end
        for i = 1,safe_pack_r.n do
            concat[safe_pack_l.n + i] = safe_pack_r[i]
        end
        concat.n = safe_pack_l.n + safe_pack_r.n
        return concat
    end
    
    -- 闭包绑定
    function Bind(self, func, ...)
        assert(self == nil or type(self) == "table")
        assert(func ~= nil and type(func) == "function")
        local params = nil
        if self == nil then
            params = SafePack(...)
        else
            params = SafePack(self, ...)
        end
        return function(...)
            local args = ConcatSafePack(params, SafePack(...))
            func(SafeUnpack(args))
        end
    end
    
    -- 回调绑定
    -- 重载形式:
    -- 1、成员函数、私有函数绑定:BindCallback(obj, callback, ...)
    -- 2、闭包绑定:BindCallback(callback, ...)
    function BindCallback(...)
        local bindFunc = nil
        local params = SafePack(...)
        assert(params.n >= 1, "BindCallback : error params count!")
        if type(params[1]) == "table" and type(params[2]) == "function" then
            bindFunc = Bind(...)
        elseif type(params[1]) == "function" then
            bindFunc = Bind(nil, ...)
        else
            error("BindCallback : error params list!")
        end
        return bindFunc
    end
  • 相关阅读:
    Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序
    flask自动重启与配置文件导入,路由重定向(8)
    go(4)字符串的应用
    go(3)变量的应用与数据类型
    go(2)输出,转义,字符接收
    go(1)
    tornado集成wtforms
    HTML5笔记007
    HTML5笔记006
    HTML5笔记005
  • 原文地址:https://www.cnblogs.com/chenggg/p/13921550.html
Copyright © 2011-2022 走看看