scala里如何中断for循环
来源:互联网 发布:淘宝oem化妆品能用不 编辑:程序博客网 时间:2024/06/03 06:57
scala里没有break关键字,所以不能像java、C++那样使用break关键字跳出循环。在scala里实际上是通过抛异常的方式来中断循环的,见下面代码:
@Test def testForeach: Unit ={ val l = Traversable(1,3,5,6,7) breakable{ for(x <- l){ if(x % 2 == 0) break else println(x) } } }
输出
1
3
5
在6处因条件不符中断了循环。
看起来似乎是使用了breakable和break两个关键字,但,
breakable是scala.util.control.Breaks的成员函数,定义如下:
def breakable(op: => Unit) { try { op } catch { case ex: BreakControl => if (ex ne breakException) throw ex } }
可见,它接受一个 => Unit型函数op,并截获BreakControl型特殊异常,该异常仅用于打断op过程,至于其他类型异常,仍然往外抛,如这句所展示的:
if (ex ne breakException) throw ex
breakable看起来像控制流的关键字,只是利用了scala里“函数仅有一个参数时()可改为{}”的特性。
break看起来也像控制流,实际不过是一个无参函数,做的就是throw BreakControl型异常的事:
private val breakException = new BreakControldef break(): Nothing = { throw breakException }
因此,scala里的break与C++、java的break看似写法类似,实则有着本质上的不同。
scala的这种for+break的组合用在某些集合操作时,可及时打断循环,避免遍历集合的所有元素,从而提升效率,在例如take、takeWhile等操作中均可看到for+break的身影。
阅读全文
0 0
- scala里如何中断for循环
- Scala之for循环
- scala的for循环
- scala for 循环
- scala函数 for循环
- scala for循环
- scala-for循环
- Scala for循环
- Scala for循环
- scala for循环
- scala while循环 for 循环
- Scala 中for循环示例
- javascript 里的for循环
- scala里面的for...yield循环
- scala的for循环 :枚举的“瑞士军刀”
- Scala模式匹配下的for循环
- Scala之for循环和函数进阶
- Scala快速入门--For循环和函数
- 设计模式——外观模式
- Python-GUI编程之 Tkinter 与 记事本实现心得
- GMM聚类及Matlab代码实现
- 什么是回调函数?
- 高级软件工程C语言编码实践--可重用的模块化程序设计
- scala里如何中断for循环
- 视觉定位激光打标
- jQuery 选择器
- [LeetCode]310. Minimum Height Trees
- 【HUD】5542 The Battle of Chibi 【dp+树状数组】
- 简单使用 Git
- Linux应用编程基础--(4)多进程基础1
- 合并两个链表并排序
- 借用Ajax实现Echarts与MySQL的交互(1)