如何创建具有可变参数的函数,就像table.insert()一样?

时间:2018-11-21 09:51:09

标签: lua lua-table

我知道我可以使用function(a,b,...)解决可变参数问题。但是,如果我想创建像table.insert(表,[pos,]值)之类的函数,该怎么办? 原因,并非以下列方式:

function (table, pos, value)
    if value == nil then
        pos = value 
        value = nil
    end
    -- do something
end

1 个答案:

答案 0 :(得分:0)

Lua没有函数重载或参数类型检查,如果需要的话,应由需要的人实现。 传达功能的用法也取决于您。

如果您对提供的代码段不满意,可以用其他方式重写它,例如:

export LD_PRELOAD=$LD_PRELOAD:/path/to/jemalloc/binary

或:

function(arg1,arg2,arg3)
    tab=arg1
    if not arg3 then
        value=arg2            
        index=#tab+1
    else
        assert(type(arg2)=='numer',"bad argument #2 to 'insert' (number expected, got table)")
        value=arg3
        index=arg2
    end
    table.insert(tab,index,value)
end

我不建议您使用带有可选的中间位置参数的函数。至少在没有编译时类型检查的语言中,甚至在那些语言中也是如此。

如果您确实想要可选参数,请将其放在表中:

f2=function(a,b)
    --do smth
end
f3=function(a,b,c) end
f=function(...)
    args={...}
    nargin=#args
    if nargin==2 then 
        f2(args[1],args[2]) --one way to use varied arguments
    elseif nargin==3 then
        f3(...) --other one 
    else error("wrong number of arguments")
    end
end
相关问题