修改密钥但实际上没有修改该值?

时间:2014-08-31 14:21:57

标签: arrays lua indexing lua-table

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)没有被修改。

1 个答案:

答案 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段。