我知道我可以使用function(a,b,...)解决可变参数问题。但是,如果我想创建像table.insert(表,[pos,]值)之类的函数,该怎么办? 原因,并非以下列方式:
function (table, pos, value)
if value == nil then
pos = value
value = nil
end
-- do something
end
答案 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