如何判断类在Scala中实现Ordering

时间:2017-02-15 07:04:39

标签: scala

假设我有以下代码:

savingObjectContext

我不想用class MyClass[K, V](val elements: Seq[(K, V)] { def myFunc() = { if (k is ordering) { MyProcess[K, V](elements) } else { otherthing } } } class MyProcess[K: Ordering, V](val content: Seq[(K, V)]) { // } 约束类型K,因为在某些条件下,我不想要这个,但是如何在MyProcess中使用隐式排序类型K?

1 个答案:

答案 0 :(得分:2)

首先,这样做可能是一个坏主意。但如果你真的确定这是你想要的,那就有可能。您必须要求可选隐式值Ordering[K]。然而,这不是开箱即用的。

免责声明/警告:提前进行无耻的自我推销

我最近将一个库推送到github,以便使用一些隐式解析技巧。它包含Optional typeclass,可以满足您的需求。

使用它,您的代码将如下所示:

import implicitlogic.Optional

class MyClass[K, V](val elements: Seq[(K, V)]) {
  def myFunc()(implicit opt: Optional[Ordering[K]]) = opt.result match {
    case Some(ordering) => new MyProcess[K, V](elements)(ordering)
    case None => otherthing
  }

  def otherthing = ???
}

class MyProcess[K: Ordering, V](val content: Seq[(K, V)])