在scala里,是没有break关键字的,但有时候我们想在循环里跳出,改怎么办呢?很简单,自己实现一个break功能。主要是通过捕获异常实现的
首先,为了更好的控制,定义一个异常类:
/*简单起见,只继承Exception*/
class BreakException() extends Exception
然后定义break“关键字”,不是真的关键字,只是一个函数而已:
/*如果一个方法抛出异常,则异常的返回值就是Nothing*/
def break(): Nothing = { throw new BreakException() }
def breakable (fn : => Unit): Unit = {
try {
fn
} catch {
case ex: BreakException => println("catch my exception. do nothing: " + ex.toString)
case ex: Exception => println("other exception: " + ex.toString)
}
}
使用就很简单了:
def run = {
breakable {
for (i <- 0 until 10) {
if (i == 5) break
else println(i)
}
}
}
不得不说,scala很强大,很多想不到的功能都可以实现,总之,都归功于函数式编程。