mi sono chiesto se trasparentiimplicit
conversioni sono davvero una buona idea e se potrebbe effettivamente essere meglio usare impliciti di più, um, esplicitamente. Ad esempio, supponiamo di avere un metodo che accetta un Date
come parametro e ho una conversione implicita che trasforma un String
in un Date
:Scala scelte di utilizzo implicita
implicit def str2date(s: String) : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
private def foo(d: Date)
Poi ovviamente posso chiamare questo con un implicit
conversione trasparente:
foo("20090910")
Sarebbe meglio rendere il fatto che sto convertendo la stringa in una data più esplicita?
class DateString(val s: String) {
def toDate : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
}
implicit def str2datestr(s: String) : DateString = new DateString(s)
Allora l'utilizzo sembra più:
foo("20090910".toDate)
Il vantaggio di questo è che è più chiaro in seguito ciò che sta accadendo - Sono stato preso fuori un paio di volte da trasparente implicit
conversioni che dovrei sapere su (Option
su Iterable
chiunque?) e questo utilizzo ci consente comunque di sfruttare la potenza di implicit
s.