有許多繼承特質Set的類。 HashSet,TreeSet等爲什麼class Set在scala中不存在?
還有對象(我可以稱它爲伴侶對象的特徵集?不是在類集的情況下?)集和特徵集。
在我看來,僅僅在該列表中添加一個「Set」類使得它似乎很容易理解結構。
是否有任何原因類集不應該存在?
有許多繼承特質Set的類。 HashSet,TreeSet等爲什麼class Set在scala中不存在?
還有對象(我可以稱它爲伴侶對象的特徵集?不是在類集的情況下?)集和特徵集。
在我看來,僅僅在該列表中添加一個「Set」類使得它似乎很容易理解結構。
是否有任何原因類集不應該存在?
在斯卡拉,類和特徵之間沒有重疊。類是可實例化的實現,而特徵是可獨立混合的接口。 Set.apply的使用給了一個帶有接口Set的對象,這就是你需要知道的一個使用它的對象。我完全理解想要一個具體的類型,但這是沒有必要的。這裏要做的正確的事情是將它保存到Set類型的val中,並只使用Set提供的接口。
我知道這可能不是令人滿意的,但是給它一點時間,Scala類型系統就其本身而言是有意義的,即使這與Java所做的不同。
如果你只需要一套,請詢問Set.apply
一個集合,你已經完成並且很開心,你有一套支持應該支持的操作集合的有效集合,不用擔心它是如何實現的。它已準備好適用於大多數使用情況。另一方面,如果某些操作的執行對你很重要,那麼創建一個具體實現set的具體類,並且你將確切地知道你擁有了什麼。
在java中你可以這樣寫:
Set<String> strings = new HashSet<>(Arrays.asList("a", "b"));
在Scala中,你可以也有那些類型
val strings: Set[String] = HashSet("a", "b")
,但你也可以使用一個方便的工廠,如果你並不需要擔心類型和簡單使用
val strings = Set("a", "b")
並沒有什麼是錯的,我不知道如何添加另一個類會有所幫助。具有接口/特性和具體實現是很正常的事情,中間不需要任何東西,也不需要幫助。
Set.apply
是集工廠。您可以使用getClass
來檢查生成對象的實際類別。這個工廠創建特殊,優化集大小0-4,例如
scala.collection.immutable.Set$EmptySet$
scala.collection.immutable.Set$Set1
scala.collection.immutable.Set$Set2
更大的套它是一個哈希集合,即scala.collection.immutable.HashSet$HashTrieSet
。
我沒有看到你缺少的東西。你會用什麼課程?你會把它放在「結構」中? – Bergi
我認爲Object Set.apply的結果類型不明確。 對象的結果Set.apply具有類型Trait Set,並且Scala解釋器說它具有類型Trait Set,但是它真的有什麼類? 我知道斯卡拉特質與java界面完全不一樣,但我不認爲特質本身可以是一個類,但我錯了嗎? – user3293793
特徵類似於Java接口......它只是它們更通用。 –