while 和 do...while 用法和 java 差不多,條件都是放 boolean 值即可 :
scala> var i = 0
i: Int = 0
scala> while(i < 5) {
| println(i)
| i = i + 1
| }
0
1
2
3
4
scala> do {
| println(i)
| i = i + 1
| } while(i < 5)
0
1
2
3
4
scala 沒有提供 break 及 continue 這兩個關鍵字使用,所以需使用其他寫法來替代.
需要 import scala.util.control.Breaks 套件的 breakable 及 break :
scala> import scala.util.control.Breaks.breakable
import scala.util.control.Breaks.breakable
scala> import scala.util.control.Breaks.break
import scala.util.control.Breaks.break
使用 breakable 區塊替代 break,下面例子 i == 3 就會 break :
scala> var i = 0
i: Int = 0
scala> breakable {
| while(i < 5) {
| if(i == 3) {
| break
| }
| println(i)
| i = i + 1
| }
| }
0
1
2
使用 breakable 區塊替代 continue,下面例子 i == 3 就會 continue 不 println :
scala> while(i < 5) {
| breakable {
| if(i == 3) {
| break
| }
| println(i)
| }
| i = i + 1
| }
0
1
2
4
所以利用 breakable 區塊的位置可以達到 break 及 continue 的效果.
下面例子是使用 scala.util.control.Breaks 物件,搭配混合使用,偶數的話 continue , i == 7 時就 break :
scala> import scala.util.control.Breaks
import scala.util.control.Breaks
scala> val breakobj = new Breaks
breakobj: scala.util.control.Breaks = scala.util.control.Breaks@5284ae6e
scala> val continuobj = new Breaks
continuobj: scala.util.control.Breaks = scala.util.control.Breaks@1bcf8661
scala> breakobj.breakable {
| while (i < 10) {
| continuobj.breakable {
| if (i % 2 == 0) {
| continuobj.break
| } else if(i == 7) {
| breakobj.break
| }
| println(i)
| }
| i = i + 1
| }
| }
1
3
5