Ein Hinweis der Entzuckern impliziter Klassen ist, erklärt in the SIP-13:
implicit class RichInt(n: Int) extends Ordered[Int] {
def min(m: Int): Int = if (n <= m) n else m
...
}
wird vom Compiler wie folgt transformiert werden:
class RichInt(n: Int) extends Ordered[Int] {
def min(m: Int): Int = if (n <= m) n else m
...
}
implicit final def RichInt(n: Int): RichInt = new RichInt(n)
Wie Sie sehen können, hat die implizite Funktion, die erstellt wird, den gleichen Namen wie die ursprünglichen Klassen. Ich denke, es ist so gemacht, damit implizite Klassen leichter importiert werden können.
So in Ihrem Fall, wenn Sie eine implizite Fall Klasse erstellen, gibt es einen Konflikt zwischen dem Methodennamen durch das implicit
Schlüsselwort und das Begleitobjekt erstellt durch das case
Schlüsselwort erstellt.
Dies ist ein Fehler. Ich öffnete [SI-6227] (https://issues.scala-lang.org/browse/SI-6227), obwohl es mich nicht überraschen würde zu entdecken, dass es ein Duplikat ist. –
Eine 'implizite Klasse' kann keine' Fallklasse' sein, das ist der einzige Grund. – Valerin