テーブルがキーなしで参照された場合、それ自体への参照ではなく特定の値を返すことは可能ですか?
次のテーブルがあるとします。
local person = {
name = "Kapulani",
level = 100,
age = 30,
}
Lua では、"person.name"、"person.level"、または "person.age" を簡単に参照して、期待どおりの値を取得できます。ただし、「person」のみを参照したい場合があり、「table:」を取得する代わりに「person.name」の値を返したい場合があります。
つまり、person.x (または person[x]) がテーブルから適切なエントリを返すようにしたいのですが、キーのない person は person.name (または person["name"]) の値を返します。私が見つけることができなかったメカニズムはありますか?
__index はキーが存在しない場合にのみ適用されるため、メタテーブルでは成功しませんでした。「人」を別のテーブルに入れると、次のようになります。
local true_person = {
... -- as above
}
local env_mt = {
__index = function(t, k)
if k == 'person' then
return true_person
end
end
}
local env = setmetatable( {}, env_mt )
これにより、__index を使用して特別な処理を行うことができますが、__index() からは、env.person (true_person.name を返したい場所) の要求を受け取っているかどうかを判断する方法がありません。 env.person[key] (「キー」に適切にアクセスできるように、true_person をテーブルとして返したい)。
何かご意見は?これには別の方法でアプローチできますが、これらの線に沿ってアプローチできることを願っています。