scala 去掉continue和break

    在programming in scala中P175页中提到 Living without break and continue,说到scala中不提倡使用break and continue,当然break 和continue主要是在for和while这样的循环中。scala中是提倡使用for,提倡使用while,理由很简单,scala提倡面向函数编程,每个方法都有返回值,而while是没有返回值。

  首先来看看书中175行具的例子。

     java代码

int i = 0;
// This is Java
boolean foundIt = false;
while (i < args.length) {
if (args[i].startsWith("-")) {
i = i + 1;
continue;
}
if (args[i].endsWith(".scala")) {
foundIt = true;
break;
}
i = i + 1;
}

在scala,中去掉break和continue的代码如下:

def searchFrom(i: Int): Int =
if (i >= args.length) -1
else if (args(i).startsWith("-")) searchFrom(i + 1)
else if (args(i).endsWith(".scala")) i
else searchFrom(i + 1)
val i = searchFrom(0)

 

上面的转化过程挺简单,当是continue时,递归调用本身,当是break时,直接返回。

 

然而,现实世界的逻辑不是这样简单,如:现在有一个列表(1 to 10)当值是 1,5,7时 continue,当值是 2,4,9时,break。代码该怎样写。

      对于continue的情况,我们可以用for 在for 里面添加filter过滤来实现 continue ,对于 break  可以 Array中的 takewhile方法。

       如果是代码中同事有break和continue时,我们该怎么办?如果for时,想比较上个元素和这个元素,又该怎么办?

 


你可能感兴趣的:(scala 去掉continue和break)