Scala中沒有break和continue, 如何退出循環


Java是指令式風格,Scala是函數式風格。

在Scala中,應該盡量適用循環,而是應用函數的方式來處理。

Scala並沒有提供break和continue語句來退出循環,那么如果我們又確實要怎么辦呢,有如下幾個選項:

1. 使用Boolean型的控制變量。

2. 使用嵌套函數,從函數當中return

3. 使用Breaks對象中的break方法(這里的控制權轉移是通過拋出和捕獲異常完成的,盡量避免使用這套機制)

4. 遞歸函數重寫循環

import util.control.Breaks._

object LoopOps {

  def main(args: Array[String]) = {
    val list = List(21, 214, -4352, 65436, 7534)

    breakTest1(list)
    breakTest2(list)

    contniueTest1(list)
    continueTest2(list)

    continueTest3(list)

  }

  def breakTest1(list: List[Int]) = {
    println("breakable語句塊來實現break操作")
    breakable {
      for (elem <- list)
        if (elem < 0) break else println(elem)
    }
  }

  def breakTest2(list: List[Int]) = {
    println("增加一個boolean變量作為for循環守衛,while循環同理")
    var foundMinus = false
    for (elem <- list if !foundMinus) {
      if (elem < 0) foundMinus = true else println(elem)
    }
  }

  def contniueTest1(list: List[Int]) = {
    println("breakable語句塊來實現continue操作")
    for (elem <- list)
      breakable {
        if (elem < 0) break else println(elem)
      }
  }

  def continueTest2(list: List[Int]) = {
    println("if else控制來實現continue操作")
    for (elem <- list)
      if (elem < 0) () else println(elem)
  }

  def continueTest3(list: List[Int]) = {
    println("遞歸函數重寫循環")
    def next(i: Int): Unit = {
      if (i >= list.size) Unit
      else if (list(i) < 0) next(i + 1)
      else println(list(i)); next(i + 1)
    }

    next(0)

  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM