我对Scala还比较陌生,它的复杂类型系统让我有些困惑。
我试图解决以下问题。我想设计作为可变双向链表成员的类(以及更复杂的数据结构,如堆)。我的目标当然是能够在常数时间内从数据结构中删除对象。
我设计了以下特质:
trait DLLMember {
var next: DLLMember = this
var prev: DLLMember = this
...
}
这里有几个额外的方法可以添加和从列表中删除对象。
问题在于,当我在我的实际类中时:
class IntInDL(val v: Int) extends DLLMember
当解析我的列表时,IntInDL.next会返回一个DLLMember类型而不是IntInDL,我必须强制转换才能检索值:这不好...
有没有一种方法可以利用Scala的类型系统来保持我的工作类型安全?