java谓词接口提供了or一种用于组合多个谓词的方法。例:
Predicate<Integer> p1;
Predicate<Integer> p2;
Predicate<Integer> p2 = p1.or(p2)
Run Code Online (Sandbox Code Playgroud)
由于scala没有Predicate接口,但Function1[A, Boolean]为此目的使用什么是编写此接口的最佳方法?最好不使用外部库。
我尝试避免以下情况:
val p1: (A => Boolean)
val p2: (A => Boolean)
val p3: (A => Boolean) = (a => p1(a) || p2(a))
Run Code Online (Sandbox Code Playgroud)
Joe*_*ley 10
您可以Predicate在隐式值类中提供以下功能:
implicit class Predicate[A](val p1: A => Boolean) extends AnyVal {
def or[B >: A](p2: B => Boolean) = (a: A) => p1(a) || p2(a)
}
Run Code Online (Sandbox Code Playgroud)
然后做
val gtOne = (x: Int) => x > 1
val ltMinusOne = (x: Int) => x < -1
val absGtOne = gtOne or ltMinusOne
absGtOne(-2) // true
absGtOne(0) // false
absGtOne(2) // true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |