【问题标题】:Switching between two strings like booleans在两个字符串之间切换,如布尔值
【发布时间】:2015-02-18 12:55:10
【问题描述】:

我经常得到具有 var 的对象,该 var 表示不是布尔值的状态,并且希望尽可能简单地切换它们。

function switch_state()

  if foo == "abc" then
    foo = "xyz"

  else
    foo = "abc"

  end

end

我可以缩短存档时间吗? 任何类似于

foo = not foo

我的第一次尝试是

foo = (foo and not "abc") or "xyz"

但这当然行不通 =(

【问题讨论】:

    标签: string lua boolean


    【解决方案1】:

    一种方法是这样做:

    foo = (foo == "abc") and "xyz" or "abc"

    【讨论】:

      【解决方案2】:

      您可以使用表格作为过渡图:

      function switch_state()
        local transit = { abc = "xyz", xyz = "abc" }
        foo = transit[foo]
        return foo
      end
      

      【讨论】:

      • 自制 switch 语句的好方法,但只有 2 个状态,我猜这有点矫枉过正。最后它并不比我的 if-then 简单。
      • 不错。 (你不是也想将 foo 传递给函数吗?如果它是全局的,则不需要返回它。)
      • @tonypdmtr 是的,您当然可以这样做。我在这里不仅仅是为了让它接近 OP 的示例。
      【解决方案3】:

      另一种方法:

      foo 存储为布尔值并使用foo = not foo 进行切换。

      当你需要字符串时使用foo and "abc" or "xyz"

      function toggle_state()
        foo = not foo
      end
      
      function state()
         return foo and "abc" or "xyz"
      end
      

      【讨论】:

      • 如果值在未来发生变化可能会导致麻烦。当然可以,但 ivos 更好。
      猜你喜欢
      • 2013-09-01
      • 1970-01-01
      • 2011-09-15
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多