编写变量Scala谓词方法
我有以下例子:编写变量Scala谓词方法,scala,variadic,Scala,Variadic,我有以下例子: 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
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))
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
pred.foldRight(true)((p, b) => b && 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.forall(p => p(value))
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
pred.foldRight(true)((p, b) => b && p(value))
代码在运行。您的问题是您没有通过要测试的值。你可以做:
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
pred.forall(p => p(value))
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
pred.foldRight(true)((p, b) => b && 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.forall(p => p(value))
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
pred.foldRight(true)((p, b) => b && p(value))
代码运行于。谢谢您的回答。非常有帮助!但是我想用foldRight来做…@gython为什么要用
foldRight
forall
在第一个错误条件下停止,这将提高性能。您完全正确!不过,我想练习一下foldRight
和foldLeft
的用法。谢谢你的回答。非常有帮助!但是我想用foldRight来做…@gython为什么要用foldRight
forall
在第一个错误条件下停止,这将提高性能。您完全正确!然而,我想练习foldRight
和foldLeft
的用法。