我有一个继承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