2017-08-27 17 views
0

これを書いた方がいいと思ったけど、覚えていない。
これをLuaで書く方がいいですか?これはどのように短く書くのですか?

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

'curSwitch =でスイッチを反転({形状= "色"、カラー= "形状"})[curSwitch]またはcurSwitch'と スタート –

答えて

3

作品:あなたがテーブルを使用して、このような簡単なスイッチを実装することができます

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

注:私はLuaを知らない。

通常、トリガーの場合は、XOR操作を使用します。あなたはそれがBを反転します1 XOR Bを計算する際に、(0または1)を持っているものは何でもB

のように、。

1 XOR 1 = 0; 1 XOR 0 = 1

おそらくinteger(理想的には、bit)とstringmapを作成することができ、そこ{0:"shapes"; 1:"colors"}を配置し、数で動作します。

それとも、あなただけのcurSwitchためtrue/falseを使用することができ、それは、この(三元OP)のようになります:

curSwitch ? "shapes" : "colors" 

しかし、あなたはそのどこでも繰り返している場合、それはその空想ではありません。

幸運を祈る! :)のみ可能2つの値ならば

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! 
3

これはどうですか。そして

oldSwitch = "colors" 
curSwitch = "shapes" 

curSwitch, oldSwitch = oldSwitch, curSwitch 
関連する問題