2
我有一個名爲engine_api的函數與內聯文檔的巨大表。因爲它變得如此之大,我想讓它更加模塊化。將元數據中的值字符串轉換爲表以進行查找
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層深。 整件事是返回單個表的系統,使其他部分可以調用這個API是這樣的:
local api = require "engine_api"
print("Engine version:", engine_api.engine.version());
我仍然需要這樣的工作方式。但是我想要做的是將API的各個部分分成不同的文件。我想我可以使用metamethods來做到這一點。但是,當metamethod被查找時,該值實際上是一個字符串,所以這種天真的方法將無法工作。
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)
相反,我似乎有做一堆,如果再else語句與字符串表名比較,然後返回該表,而不是字符串。是否有自動執行轉換的方法?
Doh!現在看起來很明顯。感謝巴西利奧! – Matt
隨時。一段時間以來,我一直在做類似的項目。 –