tengo this class en Scala:¿Por qué la inferencia tipo Scala falla aquí?
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)
}
Ahora,
"aaa".tap(_.trim)
no compila, dando el error
error: missing parameter type for expanded function ((x$1) => x$1.trim)
¿Por qué no se infiere el tipo como String
? A partir del error, parece que la conversión implícita se dispara (de lo contrario, el error estaría en la línea de "tap
no es miembro de la clase String
"). Y parece que la conversión debe ser Tapper[String]
, lo que significa que el tipo del argumento es String => Unit
(o (String => Unit)*
).
Lo interesante es que si hago un comentario ya sea de tap
definiciones, entonces se compila.
Excelente idea, gracias! Pensé que tendría que nombrarlos de manera diferente. –
¡Te estás convirtiendo rápidamente en el nuevo Daniel, Jason! –
@oxbow Aún mejor, a menudo cita las especificaciones, lo cual es algo bueno. –