Мне было интересно, прозрачны ли конверсии implicit
, и действительно ли лучше использовать implicits больше, um, явно. Например, предположим, что у меня есть метод, который принимает Date
как параметр, и у меня есть неявное преобразование, которое превращает a String
в Date
:
implicit def str2date(s: String) : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
private def foo(d: Date)
Тогда, очевидно, я могу назвать это прозрачным преобразованием implicit
:
foo("20090910")
Было бы лучше сделать тот факт, что я преобразовываю строку в дату более явным?
class DateString(val s: String) {
def toDate : Date = new SimpleDateFormat("yyyyMMdd").parse(s)
}
implicit def str2datestr(s: String) : DateString = new DateString(s)
Итак, использование выглядит больше:
foo("20090910".toDate)
Преимущество этого заключается в том, что более понятно, что происходит. Я несколько раз поймал прозрачные преобразования implicit
, о которых я должен знать (Option
to Iterable
кто-нибудь?) и это использование все еще позволяет нам использовать преимущества implicit
s.