gpt4 book ai didi

lua - 元表问题

转载 作者:行者123 更新时间:2023-12-01 06:28:32 25 4
gpt4 key购买 nike

所以我知道如果表中不包含我引用的变量,lua 会查看它的元表,但是当我尝试设置一个表中尚不存在的变量时,它会将它设置在元表中,这似乎是错误的.

这是我的意思的一个例子

a = {__index = {tbl1 = {var = 1}, tbl2 = {var = 2}}}
b = setmetatable({}, a)
print(b.tbl1.var, a.__index.tbl1.var)
b.tbl1.var = 2
print(b.tbl1.var, a.__index.tbl1.var)

在这段代码中,它将替换 metatables 变量,而不是将它设置在我引用的表中。

但是,此代码不会发生这种情况
a = {__index = {4, 5, 6}}
b = setmetatable({}, a)
print(b[1], a.__index[1])
b[1] = 2
print(b[1], a.__index[1])

使用元表和嵌套表时是否需要做更多工作?
或者有没有办法解决这个问题?

最佳答案

In this code it will replace the metatables variable instead of setting it in the table im referencing.



我认为这是可以预料的;代码检索 tbl1键并在与该键关联的表中设置一个字段。键不存在于表中,只存在于元表中,所以这就是它被设置的地方。如果在表中添加相同的键 b = setmetatable({tbl1 = {}}, a) ,您将看到该值已在该表中设置。

Is there more work needed when using metatables and nested tables? Or is there a way around this?



我不确定你期望什么结果。 Lua 不会做 autovivification ,这将使 tbl.foo = 1创建表 tbl如果它不存在。如果字段 tbl1已经存在于表中,行为正是您所期望的。如果它存在于元表中,并且您修改了它的字段,那么这正是它将被修改的地方。

关于lua - 元表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476628/

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