我有这样的代码
switch thing {
case thisThing:
do thing #1
do thing #2
case thatThing:
do thing #2
do thing #3
case anotherThing:
do thing #4
default:
default
}
因此,每种情况都只有它的作用。有些案例也与一个或多个其他案件做同样的事情。
如果我不想要任何重复代码,有没有办法实现这一目标?
或者,有没有一种更有效的方法可以在没有switch语句的情况下这样做?我的意思是,我可以,例如,我可以使用if语句,但是像switch语句一样,我无法想到一种方法来实现我想要的而不使用重复代码。
此外,这个例子可能比上面的
更清楚myFavoriteNumbers = []
myLeastFavoriteNumbers = []
switch myNumber {
case 1:
print("my number is number 1") // do this only for case 1
myFavoriteNumbers += [1] // do this for case 1 and case 2
case 2:
print("this is number 2") // do this only for case 2
myFavoriteNumbers += [2] // do this for case 1 and case 2
case 3:
print("I don't like number 3") // do this only for case 3
myLeastFavoriteNumbers += [3] // do this for case 3 and case 4
case 4:
print("Number Four") // do this only for case 4
myLeastFavoriteNumbers += [4] // do this for case 3 and case 4
default:
print("Default")
}
答案 0 :(得分:4)
您可以使用初始单独的模式匹配语句(与独立于flex-basis: content
语句的单个case
相比),该语句涵盖对任何(有效)数字唯一的操作,并让{ {1}}语句跟随处理多个数字常见操作的情况。通过这种方式,您可以分离唯一和通用的逻辑操作,后者只是作为匹配switch
实现的任何模式的通常情况实现。
例如,您的例子
switch
如果对任何数字唯一的操作更复杂,请使用与上面相同的方法,但对于唯一操作“case”使用更高级的逻辑(例如,事件处理程序)。
答案 1 :(得分:1)
您可以嵌套切换相同值的switch语句,如下所示:
upperLimit
不是您所见过的最优雅的代码,但它可以实现您想要实现的目标而不会重复。
答案 2 :(得分:1)
作为一个明显的解决方案,脑海中浮现在脑海中,但正如有人在这里已经说它不会以一种有用的方式发挥作用。
我没有任何银弹,但我想我会这样做:
创建一个仅包含单独逻辑的switch语句
创建第二个switch语句,它结合了通用逻辑
switch thing {
case thisThing:
do thing #1
case thatThing:
do thing #4
case anotherThing:
do thing #5
default: ()
}
switch thing {
case thisThing, thatThing:
do thing #2
default: ()
}
当你的逻辑不依赖于函数调用的顺序时它会起作用(它不应该,如果它不是,它可能是改进你的代码设计的标志)。对我来说它看起来很干净,但它仍然不理想..