为什么我不能在类的主体中定义构造函数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
有人能帮我理解为什么会这样吗?
答案 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)
。