Scala:为什么自我类型的特征不能看到构造函数args

时间:2016-03-07 16:25:59

标签: scala self-type

为什么我不能在类的主体中定义构造函数arg myval?例如,特征无法看到如下所示的构造函数arg:

scala> class A(myval: String){}

scala> trait B {
     | this: A =>
     | println(myval)
     | }
<console>:8: error: not found: type A
       this: A =>
         ^
<console>:9: error: not found: value myval
       println(myval)
           ^

我必须在类的主体中再次声明构造函数arg。

scala> class A(_myval: String){ val myval = _myval}
defined class A

scala> trait B {
     | this: A =>
     | println(myval)
     | }
defined trait B

有人能帮我理解为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

这是因为默认情况下class没有定义一个getter,因此您无法访问myval

如果你这样做:

class A(_myval:String) {
def myval = _myval
}

trait B {
this : A => println(myval)}

这有效。

您的示例将起作用&#34;按原样#34;然后使用case class作为吸气剂将自动生成。

编辑:根据Rob Starling评论,您可以将班级定义缩短为class A(val myval:String)