Lua:将相同的信息添加到多个子表中 - 更简单的方法?

我正在创建一个跟踪数据库,收集信息以报告每小时、每天、每周、每月、每年、每个级别、每个类别和每个等级。由此,我有一个名为 tracker 的表,其中包含一些子表,反映不同的报告(例如,table["ThisHour"] 等)。我想知道是否有一种方法可以合并所有这些行,因为它们实际上只是添加相同的信息位。以下是我正在使用的函数,以及仅使用两个子表(而不是上述列出的 8 个):

function exp_update(xp, gold, str, con, dex, wis, int, luck, bpracs, btrains, pracs, trains, qp)
local xtable = tracker[playername]["Exp"]
addto(xtable["ThisHour"],"Exp",xp)
addto(xtable["ThisHour"],"Gold",gold)
addto(xtable["ThisHour"],"BonusStr",str)
addto(xtable["ThisHour"],"BonusCon",con)
addto(xtable["ThisHour"],"BonusDex",dex)
addto(xtable["ThisHour"],"BonusWis",wis)
addto(xtable["ThisHour"],"BonusInt",int)
addto(xtable["ThisHour"],"BonusLuck",luck)
addto(xtable["ThisHour"],"BonusPracs",bpracs)
addto(xtable["ThisHour"],"BonusTrains",btrains)
addto(xtable["ThisHour"],"Pracs",pracs)
addto(xtable["ThisHour"],"Trains",trains)
addto(xtable["ThisHour"],"Qp",qp)
addto(xtable["ThisHour"],"Quests")
addto(xtable["ThisLevel"],"Exp",xp)
addto(xtable["ThisLevel"],"Gold",gold)
addto(xtable["ThisLevel"],"BonusStr",str)
addto(xtable["ThisLevel"],"BonusCon",con)
addto(xtable["ThisLevel"],"BonusDex",dex)
addto(xtable["ThisLevel"],"BonusWis",wis)
addto(xtable["ThisLevel"],"BonusInt",int)
addto(xtable["ThisLevel"],"BonusLuck",luck)
addto(xtable["ThisLevel"],"BonusPracs",bpracs)
addto(xtable["ThisLevel"],"BonusTrains",btrains)
addto(xtable["ThisLevel"],"Pracs",pracs)
addto(xtable["ThisLevel"],"Trains",trains)
addto(xtable["ThisLevel"],"Qp",qp)
addto(xtable["ThisLevel"],"Quests")
end

如您所见,这对于仅有两个子表来说已经是相当多的行了。这是每个子表的 14 行代码,或者如果我将它们全部加入,那就是 112 行代码,我希望能将其尽可能地合并。

addto 函数定义如下(如果您需要):

function addto(t,k,v)
t[k] = t[k] + (v or 1)
end

原文链接 https://stackoverflow.com/questions/9961026

点赞
stackoverflow用户734069
stackoverflow用户734069

我建议这样做:

local function exp_update_actual(vars)
  local blocks = {"ThisHour", "ThisLevel"} --以需要的形式添加其他的
  local xtable = tracker[playername]["Exp"]

  for i, block in ipairs(blocks) do
    for key, value in pairs(vars) do
      addto(xtable[block], key, value)
    end
  end
end

function exp_update(xp, gold, str, con, dex, wis, int, luck, bpracs, btrains, pracs, trains, qp)
  local vars =
  {
    Exp = xp or false,  -- nil 键将不存在。false 键将存在。
    Gold = gold or false,
    BonusStr = str or false,
    BonusCon = con or false,
    BonusDex = dex or false,
    BonusWis = wis or false,
    BonusInt = int or false,
    BonusLuck = luck or false,
    BonusPracs = bpracs or false,
    BonusTrains = btrains or false,
    Pracs = pracs or false,
    Trains = trains or false,
    Qp = qp or false,
    Quests = false,
  }
  exp_update_actual(vars);
end
2012-04-01 01:11:06