У меня есть огромная таблица функций с именем engine_api с встроенной документацией. Поскольку он становится настолько большим, я хотел бы сделать его более модульным.Преобразование строки значений в метатете к таблице для поиска
АНИ устанавливается следующим образом:
-- Engine API module
local engine_api = {
engine = {
-- engine functions...
version = ...
},
image = {
-- image functions...
jpeg = {
-- jpeg specific bits
},
},
project = {
-- project functions
}
}
return engine_api
Как вы можете видеть, это более 2 уровней вложенности. Все это возвращается в виде одной таблицы, так что другие части системы можно назвать в этом апи так:
local api = require "engine_api"
print("Engine version:", engine_api.engine.version());
Я все еще нужно, чтобы работать таким образом. Но то, что я хотел бы сделать, это разделить различные части API на разные файлы. Я думал, что смогу сделать это, используя метаметоды. Но когда метаметод просматривается, значение на самом деле является строкой, поэтому этот наивный подход не будет работать.
local engine = {
-- engine functions...
version = function()
print("engine.version")
end
}
local image = {
-- image functions
get = function()
print("image.get")
end
}
local project = {
-- project functions
load = function()
print("project.load()")
end
}
-- Engine API module
local engine_api = {
}
local engine_api_mt = {
__index = function(tbl, k)
print("k=", k)
return k
end
}
setmetatable(engine_api, engine_api_mt)
Вместо этого я, кажется, делать кучу, если потом еще заявления сравнить имя таблицы со строкой, а затем возвращает таблицу, а не строку. Есть ли способ выполнить преобразование автоматически?
Doh! теперь это так очевидно. Спасибо Базилио! – Matt
В любое время. Уже некоторое время работает над подобным проектом. –