私は、インラインドキュメントで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つの以上のレベルの深です。私はまだそれがこのように動作する必要が
local api = require "engine_api"
print("Engine version:", engine_api.engine.version());
: 全体のことは、このようなので、システムの他の部分は、このAPIを呼び出すことができ、単一のテーブルとして返されます。しかし、私がしたいのは、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)
代わりに、私はその後、else文は、文字列でテーブル名を比較して、テーブルではなく、文字列を返すように場合の束をしなければならないように見えます。自動的に変換を実行する方法はありますか?
Doh!今は明らかだ。ありがとうBasilio! – Matt
いつでも。今でも似たようなプロジェクトに取り組んでいます。 –