是否可以使用scala标准库编写如下代码?
def foldWhile[A,B](s: Stream[A])(z: B)(w: B ⇒ Boolean)(op: (B, A) ⇒ B): B = {
if(s.isEmpty) z
else {
if(w(z)) foldWhile(s.tail)(op(z, s.head))(w)(op)
else z
}
}
foldWhile(Stream(1,2,3,4))(0)(_ <= 3)((acc, v) => acc + v)
最佳答案
虽然我个人认为它是肮脏的,但你可以在弃牌中间获得返回:
def foldWhile[A,B](s: TraversableOnce[A])(z: B)(w: B ⇒ Boolean)(op: (B, A) ⇒ B): B =
s.foldLeft[B](z)((b,a) ⇒ if(w(b)) op(b,a) else return b)
关于scala - 你如何使用标准库编写 foldWhile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20289751/