如何在scala switch語句中執行一個case block開始執行另一個case block。 (在java中:沒有中斷的情況)。成功匹配後繼續匹配下一個案例的Scala開關
switch(step) {
case 0: do something;
case 1: do something more;
case 2: etc...;
break;
default: do something else;
}
感謝您的幫助!
如何在scala switch語句中執行一個case block開始執行另一個case block。 (在java中:沒有中斷的情況)。成功匹配後繼續匹配下一個案例的Scala開關
switch(step) {
case 0: do something;
case 1: do something more;
case 2: etc...;
break;
default: do something else;
}
感謝您的幫助!
如果你不能使用0 | 1 | 2
你可以使用的動作列表的解決辦法是這樣的:
def switch[T](i: T)(actions: (T,() => Unit)*)(default: => Unit) = {
val acts = actions.dropWhile(_._1 != i).map{_._2}
if (acts.isEmpty) default
else acts.foreach{_()}
}
def myMethod(i: Int): Unit =
switch(i)(
0 -> {() => println("do 0")},
1 -> {() => println("do 1")},
2 -> {() =>
println("do 2")
return // instead of break
},
3 -> {() => println("do 3")}
)(default = println("do default"))
myMethod(1)
// do 1
// do 2
myMethod(3)
// do 3
myMethod(5)
// do default
謝謝,這是我需要的。 –
在斯卡拉,沒有開關的情況下通過。你可以做或(|
)代替:
step match {
case 0 | 1 | 2 => something
...
}
對不起,我編輯了我的問題。我需要這個開關(沒有休息)寫入scala。 –
我對scala並不是很有經驗,但是爲我所知的scala添加了一個解決方案。我不確定是否有更好的方法來做到這一點。 –
def myMatch(step: Int): Int = step match {
case 0 => { dosomething(); myMatch(step + 1) }
case 1 => { dosomethingMore(); myMatch(step + 1) }
case 2 => etc()
case _ => doSomethingElse();
}
如果性能並不重要,這應該是罰款。
謝謝遞解作品。 –
什麼是錯的這個http://docs.oracle.com/javase/tutorial/java /nutsandbolts/switch.html – lakshman
對不起,我需要在scala中編寫此代碼。 –
我不認爲這是可能的 –