У меня этот класс в Scala:
object Util {
class Tapper[A](tapMe: A) {
def tap(f: A => Unit): A = {
f(tapMe)
tapMe
}
def tap(fs: (A => Unit)*): A = {
fs.foreach(_(tapMe))
tapMe
}
}
implicit def tapper[A](toTap: A): Tapper[A] = new Tapper(toTap)
}
Теперь,
"aaa".tap(_.trim)
не компилируется, выдавая ошибку
ошибка: отсутствует тип параметра для расширенной функции ((x $1) = > x $1.trim)
Почему тип не выводится как String
? Из ошибки кажется, что неявное преобразование действительно срабатывает (в противном случае ошибка будет по линиям "tap
не является членом класса String
" ). И кажется, что преобразование должно быть в Tapper[String]
, что означает, что тип аргумента String => Unit
(или (String => Unit)*
).
Интересно, что если я прокомментирую определение из tap
, тогда оно компилируется.