在 Scala 中进行函数式编程时,我遇到了以下代码片段:
def foldRight[A](z: => B)(f: (A,=>B) => B):B = uncons match {
case Some((h,t)) => f(h,t.foldRight(z)(f))
case None => z
}
然后作者继续说明以下内容:
这看起来与我们为 List 编写的 foldRight 非常相似,但请注意我们的组合函数 f 在其第二个参数中是非严格的。如果 f 选择不评估它的第二个参数,这将提前终止遍历。我们可以通过使用 foldRight 来实现 exists,它检查 Stream 中的任何值是否与给定的谓词匹配。
然后作者陈述如下:
def exists(p: A => Boolean): Boolean =
foldRight(false)((a, b) => p(a) || b)
我的问题是组合函数 f 如何导致 exists 方法提前终止?我不认为我能够从文本中理解这是如何发生的。