Sto cercando di usare> =,>, ecc DateTime (Joda), e l'unico modo ho potuto farlo funzionare stava usando questa implicita conversionein grado di fornire conversione implicita da DateTime a ordinato tramite conversione implicita a Paragonabile
implicit def dateTime2ordered(x: DateTime): Ordered[DateTime] =
new Ordered[DateTime] with Proxy {
val self = x
def compare(y: DateTime): Int = {
x.compareTo(y)
}
}
avrei preferito una forma più generica, come
implicit def comparable2ordered[A <: Comparable[A]](x: A): Ordered[A] =
new Ordered[A] with Proxy {
val self = x
def compare(y: A): Int = {
x.compareTo(y)
}
}
Ma il compilatore non riesco a trovare questa conversione, e dopo aver tentato di richiamare direttamente, ho ottenuto il seguente messaggio sostenendo che DateTime non è di tipo Comparable [A]. Dopo aver controllato l'origine per DateTime, ho visto che implementa solo Paragonabile come tipo non elaborato.
sono stato in grado di farlo funzionare utilizzando
implicit def comparable2ordered[A <: Comparable[_]](x: A): Ordered[A] =
new Ordered[A] with Proxy {
val self = x
def compare(y: A): Int = {
x.compareTo(y)
}
}
La mia domanda è: È questo il corretto trattamento Scala di questo problema, o sarebbe il tipo jolly legato causa problemi futuri con il controllo di tipo?
Penso che funzioni: 'import com.github.nscala_time.time.Imports._' – Chris
Sì, funziona, ma solo se si sta utilizzando la libreria nscala-time. ;) –
Mi piace la soluzione "Estendi ordini": breve e pulita e mantiene al minimo la "magia" – Integrator