你怎么写这个更短?

时间:2017-08-27 11:14:43

标签: if-statement lua

我认为有更好的方式来写这个,但我无法记住 有没有更好的方法在Lua中写这个?

if curSwitch == "shapes" then
  curSwitch = "colors"
elseif curSwitch == "colors" then
  curSwitch = "shapes"
end

4 个答案:

答案 0 :(得分:3)

仅在可能的情况下使用2个值:

curSwitch = (curSwitch =="shapes") and "colors" or "shapes"

答案 1 :(得分:3)

这个怎么样? 从

开始
oldSwitch = "colors" 
curSwitch = "shapes"

然后用

翻转开关
curSwitch, oldSwitch = oldSwitch, curSwitch

答案 2 :(得分:1)

注意,我不知道Lua

通常,对于触发器,您使用XOR操作。

同样,无论B有什么(01),当您计算1 XOR B时,它都会反转B

1 XOR 1 = 0; 1 XOR 0 = 1

您可以使用map(理想情况下为integer)和bit创建string并将{0:"shapes"; 1:"colors"}放在那里,然后使用该号码。

或者,您可以true/false使用curSwitch,然后它就像这样(三元操作):

curSwitch ? "shapes" : "colors"

但如果你在任何地方重复这一点,那就不那么花哨了。

祝你好运! :)

答案 3 :(得分:1)

您可以使用表格实现这样一个简单的开关。

switch = { shapes = "colors", colors = "shapes" }

curSwitch = "colors"
curSwitch = switch[curSwitch]
print(curSwitch) -- "shapes"

问题是,如果表中不存在该值,您只需获得nil

curSwitch = "garbage"
curSwitch = switch[curSwitch]
print(curSwitch) -- nil

这可以通过重载的__index元方法来解决,该方法在缺少密钥的情况下触发错误。

m = {
   __index = function(t,k)
      local v = rawget(t,k) or error("No such switch!")
      return v
   end
}

setmetatable(switch, m)
curSwitch = "garbage"
curSwitch = switch[curSwitch]
print(curSwitch) -- error!