У меня сейчас довольно умопомрачительная установка.У меня есть обычная функция, которая возвращает таблицу с функциями в ней под ключами «строка» и «число»:
function defGeneric()
local function funcNumber(a)
return 2*a^2
end
local function funcString(a)
return a.." - test"
end
local returnTable={}
returnTable["number"]=funcNumber
returnTable["string"]=funcString
return returnTable
end
И это прекрасно работает.Но сейчас я хочу сделать таблицу, которую эта функция возвращает вызываемой.Для иллюстрации, скажем, у нас есть v=defGeneric()
.В частности:
- Если
v
вызывается со строкой str
, вернуть результат v["string"](str)
- Если
v
вызывается с номером n
,вернуть результат v["number"](n)
Это очевидно работа для метатаблиц, поэтому я могу (в своей функции) добавить код для установки метатаблицы:
local metaTable = {
__call = function (...) -- "call" event handler
return
end
}
setmetatable(returnTable,metaTable)
НоЯ не знаю, что бы я положил после этого заявления.Я не думаю, что могу ссылаться на returnTable, потому что эта таблица будет называться так:
v=defGeneric()
v("test")
И мне нужно сослаться на функцию "string" v
(определенно может быть несколько defGeneric () таблицы в одной программе).
Я думаю, что ответ здесь может быть какой-то self
трюк, но я не могу обернуться, как.Как мне обратиться к таблице метатаблицы из метатаблицы?