Me he estado preguntando si transparentesimplicit
conversiones son realmente una buena idea y si en realidad podría ser mejor usar implícitos más, um, explícitamente. Por ejemplo, supongamos que tengo un método que acepta un Date
como un parámetro y tengo una conversión implícita que convierte un String
en un Date
:Scala opciones de uso implícito
implicit def str2date(s: String) : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
private def foo(d: Date)
entonces, evidentemente, que pueda llamar esto con una conversión transparente implicit
:
foo("20090910")
¿Sería mejor hacer el hecho de que estoy convirtiendo la cadena en una fecha más explícita?
class DateString(val s: String) {
def toDate : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
}
implicit def str2datestr(s: String) : DateString = new DateString(s)
Con esto, el uso se parece más a:
foo("20090910".toDate)
La ventaja de esto es que es más claro más adelante lo que está sucediendo - Me han pillado varias veces por implicit
transparente conversiones que debería saber (Option
a Iterable
¿alguien?) y este uso todavía nos permite aprovechar la potencia de implicit
s.