我有一個繼承Actor特質的類。在我的代碼中,我有一個方法使用循環創建x
這個actor的數字,另一個方法只是發送完成消息給他們所有人,告訴他們終止。我使kill方法只需要一個Actor的數組,因爲我希望能夠將它與任何類型的Actor的數組一起使用。然而,出於某種原因,當我將生產者擴展Actor的Array [Producer]類型的值傳遞給接受類型Array [Actor]的方法時,我得到一個類型錯誤。斯卡拉不應該看到生產者是一種類型的演員,並自動施放它?在斯卡拉自動鑄造
Q
在斯卡拉自動鑄造
3
A
回答
6
您所描述的內容叫做協方差,它是Scala中大部分集合類的屬性 - 子類型的集合是超類型集合的子類型。但是,由於Array
是一個Java原始數組,它不是協變的 - 子類型的集合完全不同。 (這種情況在2.7更復雜的地方是幾乎 Java原始陣列;在2.8數組只是一個普通的Java基本類型數組,因爲2.7併發症變成了有不幸的極端情況。)
如果你嘗試與ArrayBuffer
同樣的事情(從collection.mutable
< - 編輯:這部分是錯誤的,見註釋)或List
(< - 編輯:這是真的)或Set
(< - 編輯:沒有,Set
也是不變的),你」你會得到你想要的行爲。您也可以創建一個Array[Actor]
開始,但始終爲其提供Producer
值。
如果由於某種原因您確實必須使用Array[Producer]
,您仍可以使用.asInstanceOf[Array[Actor]]
進行投射。但是我建議使用原始數組以外的東西 - 任何你可能用演員做的事情都要比使用更全功能的集合類的開銷要慢得多。
相關問題
- 1. 鑄造斯卡拉
- 2. 斯卡拉型鑄造
- 3. 斯卡拉鑄造功能
- 4. 斯卡拉動態(向下)鑄造
- 5. 鑄造數值在斯卡拉
- 6. 斯卡拉隱式類型鑄造
- 7. 鑄造列表爲String斯卡拉
- 8. 斯卡拉:鑄造和分配
- 9. 斯卡拉鑄造零到int和double
- 10. 斯卡拉類鑄件
- 11. 斯卡拉構造
- 12. 訪問私有變量在斯卡拉測試沒有鑄造
- 13. 奇怪的鑄造(.asInstanceOf [T])在斯卡拉行爲2.9
- 14. 構造在斯卡拉
- 15. 自動鑄造
- 16. 斯卡拉:如何避免檢查實例和鑄造
- 17. 斯卡拉鑄造仿製藥的麻煩
- 18. UDF函數的數據類型鑄造,斯卡拉
- 19. 斯卡拉地圖鑄造的問題:類型mistmatch
- 20. 理解構造斯卡拉
- 21. 斯卡拉構造繼承
- 22. 定義斯卡拉構造
- 23. 斯卡拉擴展構造
- 24. 斯卡拉 - 方法構造
- 25. 斯卡拉並行集合類鑄
- 26. 來自序列的斯卡拉動態元組類型構造
- 27. 斯卡拉與春天:構造函數自動裝配
- 28. 斯卡拉:就是在構造函數
- 29. 覆蓋Java的構造在斯卡拉
- 30. 斯卡拉在斯卡拉類
我剛剛改變我的陣列的mutable.ArrayBuffer的,但我仍然得到相同的鑄造問題。順便說一句,我正在使用Scala 2.7.7。 – 2010-02-13 02:06:53
但是,將集合對象切換爲包含Actor而不是我的子類似乎已經解決了問題。 – 2010-02-13 02:08:25
哎呀 - 我忘了很多'mutable'集合是不變的。儘管如此,不可變的.Vector'會起作用。 – 2010-02-13 02:24:30