在函数内部重复执行函数

以下是一个示例代码:

local function name()
  startingAction()
  if trigger() then
    endingAction()
    return true
  else
    resetAction()
    startingAction()
    if trigger() then
              endingAction()
      return true
    else
      resetAction()
      startingAction()
      if trigger() then
        endingAction()
        return true
      else
        return false
      end
    end
  end

这是一个返回值为 true/false 的函数,但如果执行过程中未能满足条件,我想在它的前面加上另一个动作来重复执行该函数。这个示例代码包含 3 层嵌套,但我希望能够控制重复执行的次数。 有什么建议吗?

点赞
用户4567755
用户4567755

你可以使用基本的while循环来实现:

local MAX_RETRIES = 3

local function name()
   local tries_remaining = MAX_RETRIES

   while tries_remaining > 0 do
      startingAction()
      if trigger() then
         endingAction()
         return true
      end
      -- 这里进行了早期返回,因此以下操作相当于else部分。
      resetAction()
      tries_remaining = tries_remaining - 1
   end

   return false
end

如果需要去掉最后一个resetAction调用,则可以稍微修改整个循环,尽管不太易读且没有标准化:

local function name2()
   local tries_remaining = MAX_RETRIES

   while true do
      startingAction()
      if trigger() then
         endingAction()
         return true
      end
      if tries_remaining > 0 then
         resetAction()
         tries_remaining = tries_remaining - 1
      else
         return false
      end
   end
end

当然,你也可以使用数字型for、标签或美观的递归调用来完成。这些情况留给你自己去实现。

总之,我建议你阅读Lua参考手册 - 3.3.4 - 控制结构以及以下内容。

2019-10-14 12:07:03