Scala中没有break和continue, 如何退出循环

Java是指令式风格,Scala是函数式风格。函数

在Scala中,应该尽可能适用循环,而是应用函数的方式来处理。oop

Scala并无提供break和continue语句来退出循环,那么若是咱们又确实要怎么办呢,有以下几个选项:spa

1. 使用Boolean型的控制变量。code

2. 使用嵌套函数,从函数当中return对象

3. 使用Breaks对象中的break方法(这里的控制权转移是经过抛出和捕获异常完成的,尽可能避免使用这套机制)blog

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)

  }
}
相关文章
相关标签/搜索