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
  • 相关阅读:
    jenkins配置html报告
    JMeter并发测试(设置集合点)
    jmeter压力测试 设置一秒发送一次请求,一秒两次请求
    jmeter压力测试的简单实例+badboy脚本录制
    JMeter问题集
    英语自然拼读法基本规则和小窍门
    Jmeter工具做性能测试 常见的错误汇总
    如何使用JDK自带工具JConsole
    第七章 JMeter 逻辑控制器
    第六篇:JMeter 断言
  • 原文地址:https://www.cnblogs.com/chenggg/p/13921550.html
Copyright © 2011-2022 走看看