我的功能如下:
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
然后一切都会按预期进行。不知道我缺少哪一点。
答案 0 :(得分:0)
根据路德的评论,以下更改解决了该问题:
mytable.test={}
mytable.test.mt={}
setmetatable(mytable.test, mytable.test.mt)
function mytable.test.mt:__call(...)
return mytest(...)
end