【问题标题】:lua: piggybacking multiple variables across 1 if statementlua:在 1 个 if 语句中搭载多个变量
【发布时间】:2021-08-28 09:47:01
【问题描述】:

我有大约 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,但它并不理想。

【问题讨论】:

  • -= 在 lua 中通常不可用,您是否使用了一些特定的变体?
  • 不知道,我只是说 v=v-1
  • 您可能想使用“打印”来帮助调试您的代码。

标签: lua


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您忘记将新值重新分配到表中!

    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)
    

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多