首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Scala的订单中获取订单

从Scala的订单中获取订单
EN

Stack Overflow用户
提问于 2017-04-16 16:29:47
回答 2查看 379关注 0票数 1

给定一个具有特征Ordered的对象,是否有任何方法可以获得使用与原始对象相同比较的Ordering

我之所以要这样做,是因为我实现了具有以下签名的合并排序( Manifests只是为了能够实例化新的List[T]s和Array[T]s:

代码语言:javascript
复制
def mergeSorted[T : Manifest](li: List[T], ord: Ordering[T]) : List[T]

我想要做的是用一个带有此签名的方法重载它:

代码语言:javascript
复制
def mergeSorted[T <: Ordered[T] : Manifest](li: List[T]) : List[T]

这样,如果我对Int进行排序,我就不必手动地按Int排序了。在我看来,实现这一点的最简单的方法就是从T那里得到一个Ordering[T]ScalaDoc似乎说,这是可能的,通过暗示:

有序和有序都提供暗示,使它们可以互换使用。

但是,我不知道为了做到这一点,需要导入哪些内容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-16 17:18:39

如果你定义:

代码语言:javascript
复制
def mergeSorted[T : Ordering : Manifest](li: List[T]) : List[T]

编译器会将其转换为

代码语言:javascript
复制
def mergeSorted[T : Manifest](li: List[T])(implicit ev: Ordering[T]) : List[T]

一切都会按照你的意愿运作。

票数 1
EN

Stack Overflow用户

发布于 2017-04-16 16:59:04

math.Orderingmath.Ordered都可以通过implicit parameterimplicit conversion分别实现所需的功能。根据要使用哪一种签名,mergeSort函数将具有类似于以下内容之一的签名:

代码语言:javascript
复制
// Using math.Ordering
def mergeSort[T](li: List[T])(implicit order: Ordering[T]): List[T] = {
  ...
}

// Using math.Ordered
def mergeSort[T <% Ordered[T]](li: List[T]): List[T] = {
  ...
}

有关详细信息,您可能对此通用合并排序博客帖子感兴趣。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43439405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档