我想实现某种简单的链表。
我定义了一个抽象的 No,接下来是一个字段,它的类型是 Node。然后我有一堆其他的特定节点,继承抽象节点。
我这样写:
abstract class Node {
def next: Node
}
case class SpecificNode(nxt: Node) extends Node {
val next = nxt
}
object NullNode extends Node{
val next = new Exception("no more node")
}
但是,我发现我需要稍后在SpecificNode中更改该字段,所以我制作
case class SpecificNode(nxt: Node) extends Node {
var next = nxt
}
但是,我不能分配给next
某个特定节点的实例的字段,例如sn.next = ...
,因为编译器抱怨next_
不是节点的成员。
然后我改为var
在抽象类 Node 中使用该next
字段。
但是当我新建一个 NullNode 时,会抛出异常(因为我是这么定义的..)
那么我应该如何在这里使用var
, def
,val
呢?我应该如何定义 NullNode,它表示不再有节点?