LUA 5.3 METATABLE中的可变参数函数



我具有以下功能:

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
           --the rest is omitted for brevity
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是类型UserData的类型,则Vecmean的类型似乎未正确传递给本地函数。事实上,两者似乎都作为表格。但是,如果我以以下方式介绍:

mytable.test=mytest

那么一切都按预期工作。不知道我缺少什么意义。

根据路德的评论,以下更改解决了问题:

mytable.test={}
mytable.test.mt={}
setmetatable(mytable.test, mytable.test.mt)
function mytable.test.mt:__call(...)
    return mytest(...)
end

最新更新