Scala:"任何"和"所有"功能

fly*_*eep 62 functional-programming scala

我的Haskell*有点生疏,所以我可以想象我错过了显而易见的事情:

def any[A](s: Traversable[A], f: A => Boolean): Boolean = {
    s.foldLeft(false)((bool, elem) => bool || f(elem))
}
Run Code Online (Sandbox Code Playgroud)

这些属性中的一个是否适用于它?

  1. 预定义在Scala库中的某个位置
  2. 间接的,更快写成一些单行
  3. 错了(我没试过,对不起;))

*实际上是SML,但这是99%相同,但在阳光下没有人知道.

mis*_*tor 104

  1. 它是预定义的并被调用exists.并且forall将是您正在寻找的"全部"功能.

    scala> Vector(3, 4, 5).exists(_ % 2 == 0)
    res1: Boolean = true
    
    scala> Vector(3, 4, 5).forall(_ % 2 == 0)
    res2: Boolean = false
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您可以使用forbreak(from scala.util.control.Breaks)的循环使其更高效.(参见标准库实现的existsforall.)

  3. 这是正确的.

  • 在TraversableLike中,存在是短路的. (4认同)

Dav*_*low 6

方法上可穿越特质,对等同存在anyall:

def all[A](xs: Traversable[A], p: A => Boolean): Boolean = xs forall p

def any[A](xs: Traversable[A], p: A => Boolean): Boolean = xs exists p
Run Code Online (Sandbox Code Playgroud)