Estoy tratando de usar> =,>, etc. con DateTime (joda), y la única forma en que podría hacerlo funcionar era usando este implícito conversiónNo se puede proporcionar la conversión implícita de DateTime a Ordered usando la conversión implícita a Comparable
implicit def dateTime2ordered(x: DateTime): Ordered[DateTime] =
new Ordered[DateTime] with Proxy {
val self = x
def compare(y: DateTime): Int = {
x.compareTo(y)
}
}
yo hubiera preferido una forma más genérica como
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)
}
}
Pero el compilador no puede encontrar esta conversión, y después de intentar invocar directamente, he recibido el mensaje siguiente afirmando que DateTime no es del tipo Comparable [A]. Después de verificar el origen de DateTime, vi que solo implementa Comparable como tipo sin procesar.
que era capaz de conseguir que funcione utilizando
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)
}
}
Mi pregunta es: ¿Es este el tratamiento Scala correcta de este problema, o sería el tipo de comodín con destino causa problemas futuros con la comprobación de tipos?
Creo que esto funciona: 'import com.github.nscala_time.time.Imports._' – Chris
Sí, eso funciona, pero solo si está usando la biblioteca nscala-time. ;) –
Me gusta la solución "extends orders": corta y limpia y mantiene la "magia" al mínimo – Integrator