3

テーブルがキーなしで参照された場合、それ自体への参照ではなく特定の値を返すことは可能ですか?

次のテーブルがあるとします。

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 をテーブルとして返したい)。

何かご意見は?これには別の方法でアプローチできますが、これらの線に沿ってアプローチできることを願っています。

4

2 に答える 2