Почему вывод типа 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
определения, то он компилируется.