Lua 中数组的奇怪行为

我是Lua的新手。我有两个数组

第一个:

levels={
-- 1
{
{9,9,9,9,9,9,9,9,9},
{9,9,9,9,9,9,9,9,9},
{9,9,1,0,9,0,3,9,9},
{9,9,9,9,9,9,9,9,9},
{9,9,9,9,9,9,9,9,9}
}
,
-- 2
{
{9,9,9,9,9},
{9,9,9,9,9},
{9,9,1,9,9},
{9,9,0,9,9},
{9,9,0,9,9},
{9,9,0,9,9},
{9,9,0,9,9},
{9,9,3,9,9},
{9,9,9,9,9},
{9,9,9,9,9}
}
,
-- 3
{
{9,9,9,9,9,9,9,9,9,9},
{9,9,9,9,9,9,9,9,9,9},
{9,9,0,9,0,9,9,9,9,9},
{9,9,1,0,0,9,0,3,9,9},
{9,9,9,9,9,9,9,9,9,9},
{9,9,9,9,9,9,9,9,9,9}
}
}

而第二个数组我是这样声明的:

playingLevel=levels [1]

问题是,当我改变playingLevel的值之后,levels数组也以同样的方式发生改变。我想只更改playingLevel。

点赞
用户1208078
用户1208078

表格的值是在 Lua 中引用的。当你执行

playingLevel = levels[1]

你并没有将 levels[1] 中的表格值复制到 playingLevel 中,而是获取了对实际数据在 levels[1] 的引用,因此通过 playingLevel 更改数组值基本上与写入 levels[1][some_index] = new_value 更改值相同。

如果你想要数据的副本,则需要一个函数为你创建副本(浅拷贝或深拷贝,取决于你的使用情况)。

因此,你的代码应该像 playingLevel = copyTable(levels[1]) 这样,其中 copyTable 是你的自定义函数的实现,知道如何创建目标表的副本。

2016-08-02 14:25:29