【发布时间】:2015-11-27 15:46:09
【问题描述】:
有代码:
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 = 尾
有人知道怎么解决吗?
UPD1 和here描述的问题一样吗?
【问题讨论】:
-
在
var head = new DoubleLinkedQueueNode[T](_)中,head 的类型为 T=>DoubleLinkedQueueNode。new DoubleLinkedQueueNode[T](_),是一个部分应用的函数。 -
那么如何使它成为 DoubleLinkedQueueNode 的类型并让 DoubleLinkedQueueNode 仍然是通用的?
标签: scala