java.util.Date(java.lang.Comparableを実装)を使用していて、それをうまく使用できるようにしたいと考えています。たとえば、「compareTo(other)==1」の代わりに<と>=を使用します。scala.mathのようなものを簡単に混ぜる良い方法はありますか?ボイラープレートをたくさん使わずに注文しましたか?
3181 次
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): Ops
。Ops
クラスには。が含まれます<
。>=
etcメソッド、およびこの暗黙のdefは、Orderingのtypeパラメーターが何であれ(ここでは、任意のインスタンス)のpimpmylibraryパターンの例です。Date
于 2011-12-13T04:33:42.270 に答える