Lua 5.3元表中的可变参数函数

我有一个函数如下:

local function mytest(...)
    local args={...}
    if(#args==1 and type(args[1])=="table") then
        local x, mean=nil, nil
        for k,v in pairs(args[1]) do
            k=string.lower(k)
            if(k=="x") then x=v
            elseif(k=="mean") mean=v

           --其余部分省略
end

然后就在函数后面(在同一个脚本文件中)我有如下代码:

mytable.test={}
mytable.test.mt={}
mytable.test.mt.__call=mytest

setmetatable(mytable.test, mytable.test.mt)

这里mytable是全局空间中的某个表。

当我像这样调用函数:

mytable.test{x=Vec,mean=3}

这里Vec是用户数据类型时,似乎Vecmean的类型都没有正确传递给本地函数。实际上,它们都似乎作为表传递。然而,如果我使用以下代码:

mytable.test=mytest

那么一切都按预期进行。不确定我漏掉了什么。

点赞
用户1521241
用户1521241

根据 Luther 的评论,下面的更改解决了问题:

mytable.test={}
mytable.test.mt={}
setmetatable(mytable.test, mytable.test.mt)

function mytable.test.mt:__call(...)
    return mytest(...)
end
2019-03-02 11:30:29