15

java.util.Date(java.lang.Comparableを実装)を使用していて、それをうまく使用できるようにしたいと考えています。たとえば、「compareTo(other)==1」の代わりに<と>=を使用します。scala.mathのようなものを簡単に混ぜる良い方法はありますか?ボイラープレートをたくさん使わずに注文しましたか?

4

3 に答える 3

13

Ordering コンパニオン オブジェクトには、Comparable[A] から Ordering[A] への暗黙的な変換があります。だからあなたはこれを行うことができます:

import java.util.Date

val dateOrdering = implicitly[Ordering[Date]]
import dateOrdering._

val now = new Date
val then = new Date(now.getTime + 1000L)

println(now < then) // true
于 2011-12-13T04:59:10.963 に答える
2

この場合、混ぜることはできませんOrdered、afaik ...私はそれを試してみましたcompareToが、そことで定義されているため、問題が発生しましたjava.lang.Comparable。コンパイラは、メソッドの定義でOrdered使用しないと文句を言います。overrideそれを回避する方法がわかりません。

したがって、暗黙のを定義しますOrdering[Date]。このDateOrderingオブジェクトはどこにでも置くことができます(コンパニオンオブジェクトなど)。

import java.util.Date
implicit object DateOrdering extends Ordering[Date] {
  def compare(x: Date, y: Date) = x compareTo y
}

次に、コードで:

import DateOrdering._
val a = new Date
Thread.sleep(1000)
val b = new Date
println(a < b)     // prints true
println(a >= b)    // prints false

Orderingオブジェクトには。が含まれていますimplicit def mkOrderingOps (lhs: T): OpsOpsクラスには。が含まれます<>=etcメソッド、およびこの暗黙のdefは、Orderingのtypeパラメーターが何であれ(ここでは、任意のインスタンス)のpimpmylibraryパターンの例です。Date

于 2011-12-13T04:33:42.270 に答える