美文网首页工作生活
Scala-4.控制结构-break和continue

Scala-4.控制结构-break和continue

作者: 悠扬前奏 | 来源:发表于2019-07-05 23:56 被阅读0次

    Scala中没有break和continue这两个关键字,而是以scala.util.control.Breaks类的工具形式提供的。并且需要加上breakable方法来修饰语句块:

    import util.control.Breaks._
    
    object BreakAndContinueDemo extends App {
      println("\n=== BREAM EXAMPLE ===")
      breakable {
        for (i <- 1 to 10) {
          println(i)
          if (i > 4) break
        }
      }
    
      println("\n=== CONTINUE EXAMPLE ===")
      val searchMe = "peter piper picked a peck of pickled peppers"
      var numPs = 0
      for (i <- 0 until searchMe.length) {
        breakable {
          if (searchMe.charAt(i) != 'p') {
            break
          } else {
            numPs += 1
          }
        }
      }
      println("Found" + numPs + "p's in the string.")
    }
    

    以上代码的执行结果是:

    === BREAM EXAMPLE ===
    1
    2
    3
    4
    5
    
    === CONTINUE EXAMPLE ===
    Found9p's in the string.
    

    实际上执行到break方法时,一个异常被抛出,for循环结束。breakable方法会捕获异常,控制流继续执行被打断的代码块后面的其他代码。
    continue方法类似,只是在捕获异常之后伴随下一个元素继续执行。

    Scala中Continue的快捷用法

    下面的代码和例子中的效果一样。

    val length = searchMe.count(_ == 'p') 
    

    嵌套使用Break

    可以通过标记break语句的方式创建多个嵌套的break:

    object LabeledBreakDemo extends App {
    
      import scala.util.control._
    
      val Inner = new Breaks
      val Outer = new Breaks
    
      Outer.breakable {
        for (i <- 1 to 5) {
          Inner.breakable({
            for (j <- 'a' to 'e') {
              if (i == 1 && j == 'c') Inner.break() else println(s"i: $i, j: $j")
              if (i == 2 && j == 'b') Outer.break()
            }
          })
        }
      }
    

    如果第一个if条件被满足,抛出的异常会被Inner.breakable捕获,外层的继续,如果第二个if条件被处罚,控制流交给Outer.breakable,这时两个循环都退出。

    相关文章

      网友评论

        本文标题:Scala-4.控制结构-break和continue

        本文链接:https://www.haomeiwen.com/subject/tutrhctx.html