【问题标题】:Why I can't make separated table copies?为什么我不能制作分开的表格副本?
【发布时间】:2014-07-17 01:09:40
【问题描述】:

在一个文件中我做了这样的代码:

Source = {}
Source[1] = { a = 1, b = 2, ... }

在另一个文件中,我执行下一个:

Table = {}
Table[1] = Source[1]
Table[2] = Source[1]

我使用这种方法在 Lua 中创建对象。不过,它们不会单独行动,例如,我不能为这两个表提供不同的 a 值。

为什么?另外,我能做些什么呢?我想避免一一定义表。

【问题讨论】:

标签: class inheritance lua lua-table


【解决方案1】:

原因是变量Table[1]Table[2]只是对同一个表值的引用,它们不包含值。

要按值复制表,请逐个复制值:

for k, v in pairs(Source[1]) do
    Table[1][k]  = v
    Table[2][k]  = v
end

有关复制表的更多信息,请参阅How do you copy a Lua table by value?

【讨论】:

  • 使用 pairsiparis 对我来说总是很困难,因为我从来没有在 C++ 中学习过类似的东西。谢谢!
  • @ZoltánSchmidt 除了 Lua 的 generic for statement 允许多个循环变量之外,它几乎与 for (pair<string, int> c : map<string, int>({ { "a", 1 }, {"b", 2}} )) cout << c.first << " " << c.second << endl; 相同。
  • 在多次尝试实现此代码失败后,我意识到在右侧,一个简单的v 就足够了。
猜你喜欢
  • 2019-11-29
  • 2018-02-07
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2018-03-03
相关资源
最近更新 更多