gpt4 book ai didi

scala - 为什么 scala.math.PartialOrdering.lteq 是抽象的,而不是根据 .tryCompare 定义的?

转载 作者:行者123 更新时间:2023-12-04 08:49:49 25 4
gpt4 key购买 nike

看来 scala.math.PartialOrdering.lteq 必须始终定义为(或至少给出相同的结果):

override def lteq(x: Pattern, y: Pattern) = {
tryCompare(x, y).map(_ <= 0).getOrElse(false)
}
scala.math.PartialOrdering 中没有给出这个实现是否有某种原因?特征?

最佳答案

我的猜测是鼓励编写更高效的 lteq ,因为所有其他方法都回退到 lteq .所以你不会想创建一个 Option ,然后映射它。我宁愿问相反的问题——为什么不是 tryCompare默认情况下实现,例如:

def tryCompare(x: T, y: T) = {
val p1 = lteq(x, y)
val p2 = lteq(y, x)
if (p1) {
if(p2) Some(0) else Some(-1)
} else if (p2) Some(1) else None
}

...而且你不需要写丑陋的 override实现时的修饰符 lteq .

据我所知 tryCompare从未在整个 Scala 标准库主体中使用过,所以也许它只是一个“遗留”......

关于scala - 为什么 scala.math.PartialOrdering.lteq 是抽象的,而不是根据 .tryCompare 定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176003/

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