像布尔值一样在两个字符串之间切换

Switching between two strings like booleans

我经常得到一些对象,这些对象有一个代表非布尔状态的 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"

但这当然不行=(

您可以使用 table 作为过渡图:

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

一种方法是这样做:

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

另一种方法:

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