Ich habe this class in Scala:Warum schlägt die Fehlfunktion von Scala hier fehl?
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)
}
Jetzt
"aaa".tap(_.trim)
nicht kompiliert,
error: missing parameter type for expanded function ((x$1) => x$1.trim)
Warum die Art, wie String
geschlossen wird, um den Fehler nicht zu geben? Aus dem Fehler scheint es, dass die implizite Konvertierung ausgelöst wird (andernfalls wäre der Fehler in den Zeilen "tap
ist kein Mitglied der Klasse String
"). Und es scheint, dass die Konvertierung zu Tapper[String]
sein muss, was bedeutet, dass der Typ des Arguments String => Unit
(oder (String => Unit)*
) ist.
Die interessante Sache ist, dass, wenn ich entweder von tap
Definitionen auskommentieren, dann kompiliert es.
Ausgezeichnete Idee, danke! Ich dachte, ich müsste sie anders benennen. –
Du wirst schnell der neue Daniel, Jason! –
@oxbow Noch besser, er zitiert oft die Spezifikation, was eine gute Sache ist. –