根据 Scala编程,第304页
class Queue[T] private (leading: List[T], trailing: List[T]){
private def mirror =
if(leading.isEmpty) new Queue(trailing.reverse, Nil)
else this
def head = mirror.leading.head
def tail = {
val q = mirror
new Queue(q.leading.tail, q.trailing)
}
def append[T](x: T)={
new Queue(leading, x::trailing)
}
}
我遇到以下错误
Error:value leading is not a member of Queue[T]
def head = mirror.leading.head
与trailing
相同的错误。
mirror
是Queue
类的对象,对吗?为什么它无法访问其类参数?
答案 0 :(得分:2)
独立leading
和trailing
是Queue
类的成员,但默认情况下它们是私有的。要使其公开,请添加val
批注:
之前:
scala> class Queue[T] private (leading: List[T], trailing: List[T]){
| private def mirror =
| if(leading.isEmpty) new Queue(trailing.reverse, Nil)
| else this
| def head = mirror.leading.head
| def tail = {
| val q = mirror
| new Queue(q.leading.tail, q.trailing)
| }
| def append[T](x: T)={
| new Queue(leading, x::trailing)
| }
| }
<console>:15: error: value leading is not a member of Queue[T]
def head = mirror.leading.head
^
<console>:18: error: value leading is not a member of Queue[T]
new Queue(q.leading.tail, q.trailing)
^
<console>:18: error: value trailing is not a member of Queue[T]
new Queue(q.leading.tail, q.trailing)
^
之后:
scala> class Queue[T] private (val leading: List[T], val trailing: List[T]){
| private def mirror =
| if(leading.isEmpty) new Queue(trailing.reverse, Nil)
| else this
| def head = mirror.leading.head
| def tail = {
| val q = mirror
| new Queue(q.leading.tail, q.trailing)
| }
| def append[T](x: T)={
| new Queue(leading, x::trailing)
| }
| }
defined class Queue
您可以详细了解here的构造函数和获取方法。相关点是:
不带
val
或var
的参数是私有值,仅在 班级。