In Scala 2.11.2, die folgenden minimalen Beispiel nur kompiliert, wenn Typ Zuschreibung auf dem Array[String]
mit:Typinferenz Scala: nicht folgern IndexedSeq [T] von Array [T]
object Foo {
def fromList(list: List[String]): Foo = new Foo(list.toArray : Array[String])
}
class Foo(source: IndexedSeq[String])
Wenn ich entferne den Typ Zuschreibung in fromList
, wird es nicht mit dem folgenden Fehler kompilieren:
Error:(48, 56) polymorphic expression cannot be instantiated to expected type;
found : [B >: String]Array[B]
required: IndexedSeq[String]
def fromList(list: List[String]): Foo = new Foo(list.toArray)
^
Warum kann der Compiler die Array[String]
hier schließen? Oder muss dieses Problem etwas mit der impliziten Konvertierung von Array
zu IndexedSeq
s zu tun haben?
Hinweis Ich glaube, Sie tun können: 'Objekt Foo {def fromList (Liste: Liste [String]): Foo = new Foo (list.toArray [Zeichenfolge])}} stattdessen. – david
Oder einfach 'list.toIndexedSeq', natürlich. Die Frage ist aber immer noch gut. –
Vielen Dank, dass Sie darauf hingewiesen haben. Der Grund, warum ich mich für 'Array' anstelle von' IndexedSeq' interessiere, ist rein aus Leistungsgründen. Ich musste die Funktion profilieren und fand heraus, dass '' '' '' '' '' '' mehr Aufwand beim Erstellen von vielen kleinen Instanzen mit sich bringt. – Chris