Por que a inferência de tipo Scala falha aqui?
eu tenhoesta aula em 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)
}
Agora,
"aaa".tap(_.trim)
não compila, dando o erro
erro: tipo de parâmetro ausente para a função expandida ((x $ 1) => x $ 1.trim)
Por que o tipo não é inferido comoString
? Pelo erro, parece que a conversão implícita é acionada (caso contrário, o erro seria semelhante ao de "tap
não é um membro da classeString
"). E parece que a conversão deve ser paraTapper[String]
, o que significa que o tipo do argumento éString => Unit
(ou(String => Unit)*
)
O interessante é que se eu comentarou dotap
definições, então ele compila.