In Scala 2.11.2, il seguente esempio minimo compila solo quando si utilizza tipo attribuzione sul Array[String]
:Scala inferenza di tipo: non può dedurre IndexedSeq [T] da Array [T]
object Foo {
def fromList(list: List[String]): Foo = new Foo(list.toArray : Array[String])
}
class Foo(source: IndexedSeq[String])
Se rimuovo il tipo di attribuzione in fromList
, si sarà in grado di compilare con il seguente errore:
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)
^
Perché non è possibile che il compilatore dedurre la Array[String]
qui? O questo problema deve fare qualcosa con la conversione implicita da Array
a IndexedSeq
?
Nota Penso che si possa fare: 'oggetto Foo {def listaDa (elenco: Lista [String]): Foo = new Foo (list.toArray [String])} 'invece. – david
O semplicemente 'list.toIndexedSeq', ovviamente. La domanda è comunque buona, comunque. –
Grazie per averlo indicato. La ragione per cui sto andando per 'Array's invece di' IndexedSeq's è puramente per motivi di prestazioni. Ho dovuto profilare la funzione e ho scoperto che 'Vector's richiede più overhead durante la creazione di molte piccole istanze. – Chris