scala - 如何访问类参数?
问题描述
根据《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
吗?为什么它不能访问它的类参数?
解决方案
确实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
您可以在此处详细了解构造函数和 getter 。相关点是:
没有
val
或的参数var
是私有值,仅在类中可见。
推荐阅读
- python - 如果我可以使用 post 为什么要使用 put 方法
- docker - Docker Private Registry 仅适用于 HTTPS 或 HTTP 不能同时使用两者
- css - 如何使 Web 小部件样式与不同主题兼容?
- html - 如何在 HTML-CSS 中为单边添加圆角
- formatting - 如何更正eclipse中的代码格式设置?
- sniffing - 加速 scapy 执行 - 数据包嗅探
- python - Pandas Excelwriter 百分比元素的条件格式
- monitoring - 使用 collectd + TDengine + Grafana 部署监控系统
- javascript - Tampermonkey,根据行数单击按钮 x 次
- html - 如何使网站内容在右侧边栏之后?