lua: piggybacking multiple variables across 1 if statement

我有大约7个或以上的变量:a=1,b=10,c=12...等等

我需要为每个变量编写一个if语句,使其执行以下操作:

if var>0 then var-=1 end

如果我需要每个变量在每次迭代后记录其值,是否有一种方法可以避免为每个变量编写一个if语句? 我尝试将它们都定义在一个表中,例如:

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,但这不是理想的。

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

点赞
stackoverflow用户870125
stackoverflow用户870125

你忘记将新值重新赋值给表格了!

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)
2021-08-28 00:22:07
stackoverflow用户3574628
stackoverflow用户3574628

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

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

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

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

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
2021-08-28 01:47:01