在Coursera繼斯卡拉課程,馬丁·奧德斯基顯示的示例代碼是:爲什麼在地圖操作之後Range被轉換爲Vector?
1 to 5 map (i => i*i)
他還說,Range
被轉化爲Vector
,因爲它們共享相同的接口(IndexedSeq
)和結果不能代表作爲Range
(因爲他產生的一對是不能表示爲一個Range
它是在它的例子更清楚)。
我不確定要理解,因爲我認爲他之前說過,在表達式中,第1個生成器將確定將會生成的元素的種類,而且似乎並非總是如此,至少對於Range
而言。
我不確定要理解爲什麼輸出爲Vector
,因爲Vector
可能不是唯一可以表示上面計算結果的其他一個實現。
有人可以幫助我瞭解這部分嗎?
所以你的意思是Scala默認默認導入一些隱式的CanBuildFroms,並且我最終可以重寫它們或什麼?在這種情況下,是否有可能只是爲了理解而產生別的東西而不是Vector? –
@SebastienLorber - 確實可以!如果某些其他隱含已經可以應用,例如查找「breakOut」也許是最方便的方法。 http://stackoverflow.com/questions/2592024 –
是的,如果你明確提供了一個有效的構建器,你可以得到另一個集合 – Arjan