Lua 定时器交替切换值

我现在陷入了一个困境。

我有一个开关,我需要能够每秒打开和关闭它,但我不知道该怎么做,因为它需要应用于同一位/函数 如果当前有一个位函数作为一个功能的开/关,问题是我需要一个方法让该功能每隔1秒打开和关闭一次。 到目前为止,我尝试过这个方法,但对我来说不起作用。 请问有人能帮我解决这个问题吗?

{$lua}
if not syntaxcheck then

  local On = 1
  local Off = 0
  local Switch = OnOffController

  local function OnOff()
    if Switch = Off then
      Switch = On
    if Switch = On then
      Switch = Off
    end
    end
  end

    OnOff()
    if(Second == nil) then
      Second = createTimer(getMainForm())
      Second.Interval = 1000
      Second.OnTimer = function(timer)
        OnOff()
      end
    end
  Second.setEnabled(true)
  end
点赞
用户6562353
用户6562353

虽然可能还有其他问题,但 OnOff() 函数存在问题:

local function OnOff()
    if Switch = Off then
      Switch = On
    if Switch = On then
      Switch = Off
    end
    end
end

这两个嵌套的 if 语句不会达到想要的效果。首先,你使用的是赋值运算符 = 而不是等于运算符 ==。即使这是正确的,逻辑也存在问题。如果 Switch 在进入第一个 if 时为 On,则流程将绕过两个 if 语句。如果 Switch 在进入第一个 if 时为 Off,它将首先被更改为 On,然后立即命中第二个条件并被更改回 Off

你可能想要这样做:

local function OnOff()
    if Switch == Off then
        Switch = On
    else
        Switch = Off
    end
end

假设 Switch 只能为真或假,你根本不需要第二个比较。

我想给出的其他建议是使用布尔类型作为 Switch 变量,因为这使它具有只能具有两个值的明确性。你可能还想将其更改为类似 SwitchedOn 的名称,以明确在其上下文中真假的含义。同样,类似 ToggleSwitch 的名称可能会使现在称为 OnOff 的函数的意图更为明显。

2017-12-08 22:25:09