> val a:Seq[Integer] = Seq(3,4)
a: Seq[Integer] = List(3, 4)
如果Seq
只是一個特徵,爲什麼編譯器/ REPL接受它,並且它的行爲與其他許多特徵甚至抽象類一樣?爲什麼scala將Seq轉換爲List?
> val a:Seq[Integer] = Seq(3,4)
a: Seq[Integer] = List(3, 4)
如果Seq
只是一個特徵,爲什麼編譯器/ REPL接受它,並且它的行爲與其他許多特徵甚至抽象類一樣?爲什麼scala將Seq轉換爲List?
它不會轉換任何東西。
Seq
是一個特質,你不能真正實例化它,只能將它混合到某個類中。
由於Seq
同伴對象的apply
方法必須返回一些具體的類實例(在Seq
特點是混合),它返回一個List
這似乎是一個合理的默認值。
一種情況這可能是有用的是,當你需要一些Seq
實例,但不關心執行和沒有時間看的類型結構,找到一個合適的類實現Seq
。 Seq(3,4)
保證給你一些服從Seq
合同。
爲Seq
默認的實現是一個List作爲scaladoc這裏提到:
它說
此對象提供的一組操作來創建SEQ值。 Seq的當前默認實現是List。
當調用Seq(3,4)
你實際調用Seq.apply(3,4)
它建立兩個元素作爲List
下面的序列。
到目前爲止提供的答案沒有回答它的基本原理的部分,以及這是否圍繞大部分scala集合庫。如果有一個好的,我會很樂意從中學習! – matanster 2014-09-28 14:09:05
增加了一些理由;) – soulcheck 2014-09-28 14:10:14
好的。 [評論最小長度填充] – matanster 2014-09-28 14:11:11