Zastanawiałem się czy przezroczysteimplicit
konwersje są naprawdę taki dobry pomysł i czy może to być rzeczywiście lepiej użyć implicits bardziej, hm, wyraźnie. Na przykład, przypuśćmy, że ma sposobu, który akceptuje Date
jako parametr i mają niejawny konwersji, który zamienia String
do Date
:Scala wybory niejawne użytkowania
implicit def str2date(s: String) : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
private def foo(d: Date)
to oczywiście można nazwać przezroczystą implicit
wzorem:
foo("20090910")
Czy byłoby lepiej, aby przekonwertować ciąg na bardziej konkretną datę?
class DateString(val s: String) {
def toDate : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
}
implicit def str2datestr(s: String) : DateString = new DateString(s)
Tak więc użycie wygląda bardziej jak:
foo("20090910".toDate)
Zaletą tego rozwiązania jest to, że jaśniejsze później, co się dzieje - Zostałem złapany się kilka razy przez przezroczysty implicit
Konwersje, o których powinienem wiedzieć (Option
do Iterable
ktoś?), a to wykorzystanie pozwala nam nadal korzystać z mocy implicit
s.