class Foo {
def copy: this.type = new Foo().asInstanceOf[this.type]
def multiply(n: Int): Seq[this.type] = (0 until n).map(_ => copy)
}
Dieser Code nicht wie mit einem Fehler kompilieren:`this.type`: Warum kompiliert das nicht?
<console>:33: error: type mismatch;
found : scala.collection.immutable.IndexedSeq[Foo]
required: Seq[Foo.this.type]
ich nicht eine Erklärung für diese denken kann: this.type
copy
kehrt, multiply
gerade ruft .copy
... warum ist das Ergebnis nicht kompatibel?
Ist das ein Compiler Bug, oder gibt es einen tatsächlichen Grund, warum ich vermisse, warum das nicht funktionieren sollte?
Ich stimme der Besetzung scheint eine wirklich schlechte Idee. Außerdem zieht es der Compiler vor, keinen Singletontyp in Abwesenheit einer Beschränkung zu folgern. 'Identität (foo)' ist 'Foo' nicht' foo.type', es sei denn 'object foo' zum Beispiel. –
Eigentlich 'identity (foo): foo.type' aber nicht' identity (List (foo) .map (_ => foo)): Listet [foo.type] auf, so dass es wegen der 'CanBuildFrom'-Inferenz ist. –