gpt4 book ai didi

Scala 谓词组合

转载 作者:行者123 更新时间:2023-12-02 12:20:10 25 4
gpt4 key购买 nike

java Predicate 接口(interface)提供了一个 or 方法,用于组合多个谓词。示例:

Predicate<Integer> p1;
Predicate<Integer> p2;

Predicate<Integer> p2 = p1.or(p2)

由于 scala 没有 Predicate 接口(interface),但使用 Function1[A, Boolean] 来实现此目的,最好的编写方法是什么?最好不使用外部库。

我尽量避免以下情况:

val p1: (A => Boolean)
val p2: (A => Boolean)

val p3: (A => Boolean) = (a => p1(a) || p2(a))

最佳答案

您可以在隐式值类中提供 Predicate 功能,如下所示:

implicit class Predicate[A](val p1: A => Boolean) extends AnyVal {
def or[B >: A](p2: B => Boolean) = (a: A) => p1(a) || p2(a)
}

然后做

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

关于Scala 谓词组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55429746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com