lua:在 1 个 if 语句中搭载多个变量

lua: piggybacking multiple variables across 1 if statement

我有大约 7 个以上的变量:a=1、b=10、c=12...等等
我需要为每个执行此操作的人编写一个 if 语句:

if var>0 then var-=1 end

如果我需要每个变量在每次迭代后记录它们的值,有没有办法避免为每个变量写一个 if 语句? 我尝试在 table 中定义它们,例如:

a=1;b=2;c=3

local t = {a,b,c}
for _,v in pairs(t) do
    if v>0 then v-=1 end
end
a,b,c=t[1],t[2],t[3]    

这段代码失败了,不知道为什么。最终我正在寻找比简单地编写 ifs 更有效的方法。您可以根据成本或令牌或两者来定义效率。使用的值是随机的,没有模式。变量名称可能会更改,即 a_1、a_2、a_3,但它并不理想。

您忘记将新值分配给 table!

local a, b, c = 1, 2, 3
local t = {a, b, c}
for k, v in ipairs(t) do
    if v > 0 then v -= 1 end
    t[k] = v
end
a, b, c = t[1], t[2], t[3]
print(a, b, c)

有几个解决方案。为了缩短您的代码,您可以编写一个函数来处理每个变量的值和 运行 它:

local function toward0(var)
  if var > 0 then
    return var - 1
  end
  return var
end

a = toward0(a)
b = toward0(b)
c = toward0(c)

您还可以将数据存储在 table 而不是变量中。然后你可以循环处理它们:

local valuesThatNeedToBeDecremented = {a = 1, b = 10, c = 12}

for k, v in pairs(valuesThatNeedToBeDecremented) do
  if v > 0 then
    valuesThatNeedToBeDecremented[k] = v - 1
  end
end