Мне было интересно, прозрачны ли конверсии 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.
