gpt4 book ai didi

syntax - 我可以为自己覆盖 Lua 表的返回值吗?

转载 作者:行者123 更新时间:2023-12-01 16:19:23 27 4
gpt4 key购买 nike

在没有键的情况下引用表是否可能返回特定值而不是对自身的引用?

假设我有下表:

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 作为表返回,以便可以适本地访问“key”)。

有什么想法吗?我可以采用不同的方法来解决这个问题,但希望我可以按照这些思路来解决这个问题。

最佳答案

当表被用作字符串时,您可以通过设置 __tostring 元表条目来执行此操作:

$ cat st.lua
local person = {
name = "Kapulani",
level = 100,
age = 30,
}

print(person)
print(person.name)
print(person.age)

setmetatable(person, {__tostring = function(t) return t.name end})
print(person)

$ lua st.lua
lua st.lua
table: 0x1e8478e0
Kapulani
30
Kapulani

关于syntax - 我可以为自己覆盖 Lua 表的返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24813370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com