gpt4 book ai didi

scala - Scala 库中 PartialOrdering 的目的

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

我明白什么是partial order从数学的角度来看,但看不到在哪里以及如何PartialOrdering可以使用 Scala 库中的类型类。我搜索了整个标准库,只有一种用法:它通过 Ordering 扩展。其主要方法的相同故事tryCompare ,它似乎没有在任何地方使用。

那么,如果不是,我可以得到什么好处

case class Foo(x: Int, y: String)

val order = Ordering.by { foo => (foo.x, foo.y) }

我实现了一个更域正确的实例:
object PartialFoo extends PartialOrdering[Foo] {
def tryCompare(a: Foo, b: Foo): Option[Foo] = {
if (a.x != b.x) None // Doesn't make sense to compare foos with different xs
else ???
}
}

UPD :它似乎也像订购特征 defined带返回类型 Some[Int] (不是 Option[Int] ),我什至不能使用覆盖。是故意的吗?

最佳答案

这似乎是 的模板类型类 这将代表一个类型的自然偏序。

这些类的要点不是显式使用,而是在库中隐式使用,这将允许用户访问只能应用于具有这种自然类型类可用的类型的方法。

例如,Numeric type 类,例如 sum 的隐式参数集合方法,在执行类似 val x = List(1, 2, 3).sum 的操作时实际上从未明确提供.
相反,scala 默认导入一个 Numeric[Int]范围内的对象,它允许编译器“知道”如何对整数求和。

同样,如果要开发一种仅对具有自然偏序的元素“起作用”的方法,则有两种选择:

  • 创建类似 PartiallyOrdered 的特征并且需要这种类型的参数 - 这不是很灵活,只是与 sum 方法相比,它可以在任何集合上调用
  • 添加类型为 PartialOrdering[T] 的隐式参数到方法,并为所需类型创建实现。

  • 虽然我找不到任何不实现 Ordering 的 PartialOrdering 的实际实现,但拥有这个类仍然是一件好事,因为它意味着任何想要实现 PartialOrdering 而不是 Ordering 的用户, 也可以通过下单到他们使用 PartialOrdering 的方法!例如。整数、字符串等

    所以说我创建了一个类 A和偏序
    APartialOrdering extends PartialOrdering[A] .

    因为我的类型 A不承认自然排序,只有部分排序。最后,我创建了一个方法
    def doSomethingForPartiallyOrdered[T](t: T)(implicit po: PartialOrdering[T]) = _
    现在,我可以传递 A 类型的对象,还有 Int 的、字符串等。

    关于scala - Scala 库中 PartialOrdering 的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36791010/

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