拥有代码:
class DoubleLinkedQueue[T] {
class DoubleLinkedQueueNode[T](value: T) {
var next : DoubleLinkedQueueNode[T]
var prev : DoubleLinkedQueueNode[T]
}
var head = new DoubleLinkedQueueNode[T](_)
var tail = new DoubleLinkedQueueNode[T](_)
head.next = tail //compillation error here
def isEmpty() : Boolean = {
return head.next == tail //and here
}
def peekStart() : T = {
return head.next.value //and here too
}
def popStart() : T = {
val result = peekStart()
head.next = head.next.next //and everywhere when trying to acces head or tail properties
return result
}
def peekEnd() : T = {
return tail.prev.value
}
def popEnd() : T = {
val result = peekEnd()
tail.prev = tail.prev.prev
return result
}
def pushStart(value : T) : DoubleLinkedQueue[T] = {
val node = new DoubleLinkedQueueNode[T](value)
node.next = head.next
node.prev = head
head.next = node
return this
}
def pushEnd(value : T) : DoubleLinkedQueue[T] = {
val node = new DoubleLinkedQueueNode[T](value)
node.prev = tail.prev
node.next = tail
tail.prev = node
return this
}
}
并有编译错误:
DoubleLinkedQueue.scala:9:错误:值next不是T =>的成员DoubleLinkedQueue.this.DoubleLinkedQueueNode [T] head.next = tail
有人知道如何解决它吗?
UPD1 是否与here描述的问题相同?
答案 0 :(得分:0)
您可以使DoubleLinkedQueueNode的值可变:
class DoubleLinkedQueueNode[T] {
var next : DoubleLinkedQueueNode[T] = _
var prev : DoubleLinkedQueueNode[T] = _
var value: T = _
}
所以你不需要用以下内容对其进行初始化:
var head = new DoubleLinkedQueueNode[T](_)
相反,您将拥有:
var head = new DoubleLinkedQueueNode[T]
答案 1 :(得分:0)
似乎是一个很好的解决方案是在DoubleLinkedQueueNode中使用Option作为'val'的类型。
答案 2 :(得分:0)
如果您决定创建DoubleLinkedQueueNode的实例,则必须为其指定类型为T的正确值,而不是_。
撰写以下内容时:
var head = new DoubleLinkedQueueNode[T](_)
您实际上创建了以下功能:
T => DoubleLinkedQueueNode[T] = <function1>
所以基本上,它和写作一样:
var func = new DoubleLinkedQueueNode[T](_)
var head = func(someValueOfTypeT)
顺便说一句,我在代码中发现了其他问题,例如:
第二个命令可以删除:
var head = new DoubleLinkedQueueNode[T](_)
var tail = new DoubleLinkedQueueNode[T](_)
head.next = tail //compillation error here
值应为val(因为它在DoubleLinkedQueue中以各种方法访问)
class DoubleLinkedQueueNode[T](val value: T) {
希望它有所帮助。