我认为有更好的方式来写这个,但我无法记住 有没有更好的方法在Lua中写这个?
if curSwitch == "shapes" then
curSwitch = "colors"
elseif curSwitch == "colors" then
curSwitch = "shapes"
end
答案 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
有什么(0
或1
),当您计算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!