【大数据-scala】scala中实现break与continue功能

╰半夏微凉° 2022-12-17 07:23 254阅读 0赞

原文转载自:scala中实现break与continue功能

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

在别的编码语言中,break与continue两种控制语句是非常常见的用法,一般也有对应的关键字。但是在scala中,没有专门的break与continue关键字。那怎么在循环中实现break与continue功能呢?

1.实现break功能

  1. package com.xiaomi.leilei.test1
  2. import scala.util.control.Breaks._
  3. /**
  4. * Created by wanglei on 17/8/11.
  5. */
  6. object breakdemo {
  7. def breaktest() = {
  8. val arr = Array(1, 2, 3, 4, 5, 6)
  9. breakable {
  10. arr.foreach { x =>
  11. if (x > 3) break
  12. else println(x)
  13. }
  14. }
  15. }
  16. def main(args: Array[String]): Unit = {
  17. breaktest()
  18. }
  19. }

最后的输出结果为:

  1. 1
  2. 2
  3. 3

2.实现continue功能

  1. package com.xiaomi.leilei.test1
  2. import scala.util.control.Breaks._
  3. /**
  4. * Created by wanglei on 17/8/11.
  5. */
  6. object breakdemo {
  7. def continuetest() = {
  8. val arr = Array(1, 2, 3, 4, 5, 6)
  9. arr.foreach {
  10. x => breakable {
  11. if(x == 4) break()
  12. else println(x)
  13. }
  14. }
  15. }
  16. def main(args: Array[String]): Unit = {
  17. continuetest()
  18. }
  19. }

通过上面的代码不难发现,实现break与continue功能,都需要util.control.Breaks._类的辅助。不同的是,将整个循环的逻辑放在breakable方法中,在需要真正跳出循环的时候使用break方法,这样达到了跳出整个循环的目的。而continue功能是将breakable放在循环内,这样可以实现结束本次循环的目的而不是结束整个循环。

3.Breaks的部分源码

  1. package scala
  2. package util.control
  3. /** A class that can be instantiated for the break control abstraction.
  4. * Example usage:
  5. * {
  6. {
  7. {
  8. * val mybreaks = new Breaks
  9. * import mybreaks.{break, breakable}
  10. *
  11. * breakable {
  12. * for (...) {
  13. * if (...) break()
  14. * }
  15. * }
  16. * }}}
  17. * Calls to break from one instantiation of `Breaks` will never
  18. * target breakable objects of some other instantiation.
  19. */

如果翻译过来就是说:
1.Breaks是一个可以实例化为中断控制抽象的类。
2.Breaks的实例对象永远不用破坏要被中断对象的实例。
3.注释中给出了明确的要实现break功能的代码样式。

发表评论

表情:
评论列表 (有 0 条评论,254人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Javacontinuebreak

    1.一般的continue会退回最内层循环的开头,并继续执行下一次循环。 2.带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环。 3.一般的

    相关 break continue

    break语句:             如果遇到循环嵌套的情况,break语句将只会使程序流程跳出它的最内层的循环结构,只跳出一城循环。         如果想让br