Scala 2.11.2 następujące minimalne przykład sporządza jedynie przy użyciu rodzaju przypisanie na Array[String]
:Scala rodzaju wnioskowanie: nie można wywnioskować IndexedSeq [t] z Array [T]
object Foo {
def fromList(list: List[String]): Foo = new Foo(list.toArray : Array[String])
}
class Foo(source: IndexedSeq[String])
Jeśli usunąć przypisanie typu w fromList
, to nie skompilować z powodu następującego błędu:
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)
^
Dlaczego nie kompilator wywnioskować Array[String]
tutaj? Czy też ten problem musi coś zrobić z niejawną konwersją z Array
do IndexedSeq
?
Uwaga myślę, że można zrobić: 'obiekt Foo {def z_listy (lista: Lista [String]): Foo = new Foo (list.toArray [String])} zamiast tego. – david
Albo po prostu 'list.toIndexedSeq', oczywiście. Pytanie wciąż jest jednak dobre. –
Dzięki za wskazanie tego. Powodem, dla którego wybieram 'Array's zamiast' IndexedSeq's jest wyłącznie ze względu na wydajność. Musiałem profilować tę funkcję i odkryłem, że 'Vector's bierze więcej na siebie przy tworzeniu wielu małych instancji. – Chris