如何解决编写可变参数 Scala 谓词方法
我有以下示例:
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 运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。