2017-08-27 1 views
0

Je pensais qu'il y avait et meilleure façon d'écrire cela, mais je ne me souviens pas.
Existe-t-il une meilleure façon d'écrire ceci dans Lua?Comment écrivez-vous ceci plus court?

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

'curSwitch = ({formes = "couleurs", couleurs = "formes"}) [curSwitch] ou curSwitch' –

Répondre

3

ne fonctionne que si possible 2 valeurs:

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

Remarque, je ne sais pas Lua.

Généralement, pour un déclencheur, vous utilisez l'opération XOR.

Comme, tout B a (0 ou 1), lorsque vous calculez 1 XOR B il inverser la B.

1 XOR 1 = 0; 1 XOR 0 = 1.

Vous pouvez probablement créer un map avec integer (idéalement, un bit) et string et mettez y {0:"shapes"; 1:"colors"} puis travailler avec le nombre.

Ou, vous pouvez simplement utiliser un true/false pour la curSwitch, alors ça va ressembler à ceci (op ternaire):

curSwitch ? "shapes" : "colors" 

Mais ce n'est pas cette fantaisie si vous répétez que partout.

Bonne chance! :)

1

Vous pouvez mettre en œuvre un tel commutateur simple à l'aide d'une table.

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

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

Le problème est que si la valeur n'existe pas dans le tableau que vous obtenez simplement nil.

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

Cela peut être résolu par une surcharge __index qui déclenche métaméthode une erreur dans le cas des clés absents.

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

Et à ce sujet. Commencez par

oldSwitch = "colors" 
curSwitch = "shapes" 

l'interrupteur, puis soulevez avec

curSwitch, oldSwitch = oldSwitch, curSwitch