players={}
players["foo"] =
{
wins = 0, deaths = 0, draws = 0, rounds = 0, bet = "None", rank = 0
}
modify = function (stat, set, target)
local player = players[target]
local dictionary =
{
["wins"] = player.wins, ["deaths"] = player.deaths,
["draws"] = player.draws, ["rounds"] = player.rounds,
["bet"] = player.bet, ["rank"] = player.rank,
}
if dictionary[stat] then
dictionary[stat] = set
print(dictionary[stat])
print(player.wins)
end
end
modify("wins", 1, "foo")
上面提到的代码并没有像它应该的那样真正发挥作用。它修改了关键"胜利"但它的自我价值(玩家[目标] .wins)没有被修改。
答案 0 :(得分:2)
数字值不是参考。当您将它们复制回原始位置时,您会获得副本。
因此,当您指定["wins"] = player.wins
时,您无法获得对播放器表格中wins
字段的引用。您正在将值复制到dictionary
表中。
如果你想修改播放器表,你需要修改播放器表。
此功能中的间接完全没有必要。您可以引用player[stat]
,就像引用dictionary[stat]
一样。
tbl.stat
, tbl["stat"]
为syntactic sugar [1]。
此外,如lua手册的§2.5.7
所示:
tbl = {
stat = 0,
}
与
相同tbl = {
["stat"] = 0,
}
当名称是字符串时,不以数字开头,并且不是保留标记。
[1]请参阅The type table
段。