Как создать функцию с переменными параметрами, как table.insert ()? - PullRequest
0 голосов
/ 21 ноября 2018

Я знаю, что могу использовать функцию (a, b, ...) для решения проблем с переменными параметрами.Но как мне это сделать, если я хочу создать такую ​​функцию, как table.insert (table, [pos,] value)?Конечно, не следующим образом:

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

1 Ответ

0 голосов
/ 21 ноября 2018

Lua не имеет функции перегрузки или проверки типов аргументов, при необходимости они должны быть реализованы нужным.Передача информации об использовании вашей функции также зависит от вас.

Если вы не удовлетворены предоставленным фрагментом, вы можете переписать его другими способами, например:

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

Я не рекомендую делать функции с необязательными аргументами среднего положения.По крайней мере, не в языке без проверки типов времени компиляции, и даже в тех.

Если вам действительно нужны необязательные аргументы, поместите их в таблицу:

function(args)
    tab=args.table
    index=args.index or #tab+1
    value=args.value
    --other arguments, options and associated logic here
    table.insert(tab,index,value)
end
...