如果没有键引用一个表,是否可能返回特定值而不是对它本身的引用?
假设我有以下表格:
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仅适用于键不存在的情况。如果我将“person”放入单独的表中,则可以使用以下代码:
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”)。 有什么想法吗? 我可以采用不同的方法来处理,但希望能够沿着这些方向处理。