Lua 在两个表中调用函数会得到相同的输出

Lua 在两个表中调用函数会得到相同的输出,lua,Lua,我最近尝试了luas-Pseudeo-OOP机制。我想在表中调用一个函数,将值写入表中的变量。我试着使用自变量。这是我的密码: local Table = {} Table.value = 0; function Table:myfunc(Parameter) self.value = Parameter; end local Table1 = Table; local Table2 = Table; Table1:myfunc("1"); Table2:m

我最近尝试了luas-Pseudeo-OOP机制。我想在表中调用一个函数,将值写入表中的变量。我试着使用自变量。这是我的密码:

local Table = {}
Table.value = 0;
  
function Table:myfunc(Parameter)
    self.value = Parameter;
end

local Table1 = Table;
local Table2 = Table;

Table1:myfunc("1");
Table2:myfunc("2");

print(Table1.value)
print(Table2.value)
问题是,它两次都打印2。如果我打印出函数的参数iside,那么它会显示1和2,这正是我想要的。 那么我做错了什么

(很抱歉,如果我在错误的地方写了这篇文章,这是我在这里的第一篇帖子:))

任何帮助都将受到感谢


问候语表不是不可变的,这意味着它们总是通过引用传递

table 1
table 2
都引用了table
table

此代码的作用与以下代码相同:

表格:myfunc(“1”)
表:myfunc(“2”)
要解决这个问题,需要将每个表作为单独的实例。要在它们上使用
myfunc
,您需要将此函数复制到每个实例,或者为所有实例创建一个元表,并将
myfunc
放入其中

解决方案1:
localtable1={value=0,myfunc=myfunc}——每个实例都必须设置此函数
本地表2={value=0,myfunc=myfunc}
表1:myfunc(“1”)
表2:myfunc(“2”)
打印(表1.value,表2.value)--12
解决方案2:
localmeta={myfunc=myfunc}——创建元表
Meta.\uuu index==Meta——在索引事件上(在tbl.var或tbl[var]上)使用“Meta”表
本地表1={value=0}
本地表2={value=0}
setmetatable(Table1,Meta)——为实例设置metatable
可设置元表(表2,元)
表1:myfunc(“1”)
表2:myfunc(“2”)
打印(表1.value,表2.value)--12
当使用不存在的键(如回退键)索引表时,将使用元表的_索引


这个问题在Lua PIL的书中有详细的解释,并在将来对元表进行解释:

嘿,谢谢你的详细回答!好了,现在我明白了那些元表的用途。谢谢你,你好,玛丽安:)