Scala forall 示例?

51

我尝试使用谷歌搜索,但没有找到一个合适的forall示例。它是什么?为什么要使用布尔函数?

请给我提供一些参考资料(除了 Scaladoc)。


6
检测此列表中的所有元素是否都满足给定的条件。 - MikkoP
1
也许你感到困惑是因为你误以为 foreach 的功能是遍历所有元素。 - 0__
1
是的,我在想它是foreach的并行版本。 - Jus12
3个回答

92

forall方法接受一个返回布尔值的函数pforall方法的语义是:如果对于集合中的每个xp(x)都为真,则返回true

因此:

List(1,2,3).forall(x => x < 3)

意思是: 如果 1、2 和 3 都小于 3,则为true,否则为false。在此情况下,它将评估为false,因为所有元素都不小于3:3不小于3。

还有一个类似的方法exists,如果集合中存在至少一个元素x使得p(x)返回true,则返回true

因此:

List(1,2,3).exists(x => x < 3)

意思是:当1、2和3中至少有一个小于3时,返回true,否则返回false。在这种情况下,它将评估为true,因为其中某个元素小于3:例如1小于3。


3
forall(foo) 相当于 foldLeft(true)((x,y)=> x & foo(y)) - Jus12
6
@Jus12,是的,需要更正一下,它使用 && 是因为它进行了短路评估(如果找到 false 就停止评估 foo)。 - dhg

4

以下是一个使用 Scala 脚本来操作该函数的快速示例。

创建名为 myScript.scala 的文件,其中包含:

println(args.forall(p => (p.equals("a"))))

并使用以下代码进行调用

scala myScript.scala a a a  // true
scala myScript.scala a b c  // false

8
为什么不使用 REPL? - Fabien Warniez

0

Scala的forall也是一个很好的工具,可以像应用逻辑and到布尔值列表一样使用,同时还支持提前退出

val evalResults: List[Boolean] = List(evaluateFunc1(), evaluateFunc2(), evaluateFunc3(), evaluateFunc4(), evaluateFunc5())

evalResults.forall(result => result == true)

forall(result => result) - codeaperature

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接