Lua 5.3在metatable中的变量参数函数

问题描述 投票:0回答:1

我有如下功能:

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,似乎Vec的类型和mean的类型未正确传递给本地函数。事实上,两者似乎都以表格形式传递。但是,如果我以下列方式介绍:

mytable.test=mytest

一切都按预期工作。不知道我错过了什么点。

lua
1个回答
0
投票

根据Luther的评论,以下变更解决了这个问题:

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

function mytable.test.mt:__call(...)
    return mytest(...)
end
© www.soinside.com 2019 - 2024. All rights reserved.