在lua中嵌套元表
在下面的代码中,我试图在_索引上嵌套元表,但它不起作用。我想做的是,如果值是t1或t2,那么返回相关的值,否则调用最里面的_索引上的函数。这可能吗 因此,在下面的x[“hello”]中,我可以返回一个值。我知道我可以在最外层的索引上使用一个函数,但似乎我应该能够使用嵌套的元表来实现这一点 蒂亚 这是可行的,但似乎我可以用元表来实现在lua中嵌套元表,lua,Lua,在下面的代码中,我试图在_索引上嵌套元表,但它不起作用。我想做的是,如果值是t1或t2,那么返回相关的值,否则调用最里面的_索引上的函数。这可能吗 因此,在下面的x[“hello”]中,我可以返回一个值。我知道我可以在最外层的索引上使用一个函数,但似乎我应该能够使用嵌套的元表来实现这一点 蒂亚 这是可行的,但似乎我可以用元表来实现 x = { val = 3 } -- our object mt1 = { t1 = 2, t2 = 3 } m
x = { val = 3 } -- our object
mt1 = {
t1 = 2,
t2 = 3
}
mt = {
__index = function (table, key)
local a = mt1[key]
if a == nil then
print("here"..key)
a = "test"
end
return a
end
}
setmetatable(x, mt)
print(x["t1"])
print(x.t2)
print(x["hello"])
这是可行的,但我可以不声明mt2就这样做吗
x = { val = 3 } -- our object
mt2 = {
__index = function (table, key)
print("here"..key)
return key
end
}
mt = {
__index = {
t1 = 2,
t2 = 3
}
}
setmetatable(mt.__index, mt2)
setmetatable(x, mt)
print(x["t1"])
print(x.t2)
print(x["hello"])
…对于在家中跟随的任何人来说,这里是内嵌嵌套元表的。谢谢你的提示,亚历山大,这使它更干净了
x = setmetatable(
{ val = 3 },
{
__index = setmetatable({
t1 = 2,
t2 = 3
},
{
__index = function (table, key)
print("here"..key)
return key
end
}
)
}
)
print(x["t1"])
print(x.t2)
print(x["hello"])
只需嵌套setmetatable()
调用-它返回第一个参数。另外:你在这里创建了很多全局变量,local
是你的朋友。
x = setmetatable(
{ val = 3 },
{
__index = setmetatable({
t1 = 2,
t2 = 3
},
{
__index = function (table, key)
print("here"..key)
return key
end
}
)
}
)
print(x["t1"])
print(x.t2)
print(x["hello"])