Lua 5.3 переменная функция аргумента в метатабельной - PullRequest
0 голосов
/ 01 марта 2019

У меня есть функция следующим образом:

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

, тогда все будет работать как положено.Не уверен, какой момент я упускаю.

1 Ответ

0 голосов
/ 02 марта 2019

Основываясь на комментарии Лютера, следующее изменение решает проблему:

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

function mytable.test.mt:__call(...)
    return mytest(...)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...