6
在Scala中2.11.2,下面的小例子在Array[String]
使用類型歸屬當只編譯:Scala的類型推斷:不能推斷IndexedSeq [T]從Array [T]
object Foo {
def fromList(list: List[String]): Foo = new Foo(list.toArray : Array[String])
}
class Foo(source: IndexedSeq[String])
如果我刪除fromList
類型歸屬,它會失敗,出現以下錯誤編譯:
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)
^
爲什麼不能編譯器推斷Array[String]
這裏?還是這個問題必須做一些從Array
's到IndexedSeq
的隱式轉換?
注意我認爲你可以這樣做:'對象foo {高清fromlist裏(名單:名單[字符串]):美孚=新的Foo(list.toArray [字符串] )}'而不是。 – david 2014-10-31 15:38:24
或者只是'list.toIndexedSeq',當然。不過,這個問題依然很好。 – 2014-10-31 15:41:03
謝謝你指出。我爲'Array's而不是'IndexedSeq'尋找原因純粹是出於性能原因。我不得不剖析這個函數,發現'Vector'在創建大量小實例時需要更多的開銷。 – Chris 2014-10-31 15:48:07