编写可变 Scala 谓词方法

Writing a variadic Scala predicate method

我有以下示例:

val check30 = allTrue(x:Int => x%2 == 0, x:Int => x%3 == 0, x:Int => x%5== 0)
val check30(60) //evaluates to true 

我想编写一个谓词方法 allTrue,它采用几个谓词,就像在示例中一样,并通过 foldRight.

组合它们

我试过这样的事情:

def allTrue[T](pred: T =>Boolean*): Boolean =
    pred.foldRight(true)(_ && _)

但是这不起作用。

我该怎么做才对?

你的问题是你没有传递你想要测试的值。你可以这样做:

def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.forall(p => p(value))

然后使用它:

val check30 = allTrue[Int](_ % 2 == 0, _ % 3 == 0, _ % 5 == 0)(_)
val result = check30(60) //evaluates to true
println(result)

使用foldRight你可以做到:

def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.foldRight(true)((p, b) => b && p(value))

代码 运行 在 Scastie