在没有键的情况下引用表时,是否有可能返回特定值而不是对自身的引用?
假设我有下表:
local person = {
name = "Kapulani",
level = 100,
age = 30,
}
在 Lua 中,我可以很容易地引用“person.name”、“person.level”或“person.age”并获得预期的值。但是,在某些情况下,我可能只想引用“person”,而不是获取“table:”,我想返回“person.name”的值。
换句话说,我希望 person.x(或 person[x])从表中返回适当的条目,但没有键的人返回 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 作为表返回,以便可以适当地访问“key”)。
有什么想法吗?我可以以不同的方式处理这个问题,但希望我可以沿着这些思路处理这个问题。