为什么班级成员应该添加" var" /" val"或者我们无法访问他们?
在scala中,如果我们声明一个这样的类,它将编译错误。class A(a : Int) {}
val x = new A(3)
x.a // compile error
如果我们将val添加到成员a:
class A(val a : Int) {}
val x = new A(3)
x.a // compile pass
两个班级有什么区别?
答案 0 :(得分:2)
第一个定义描述了一个带有构造函数参数(不是成员)a
的类 - 你可以在构造函数中使用它:
class A(a : Int) {
//---default constructor body starts---
val aa = a
//---default constructor body ends---
}
scala> val a = new A(5)
a: A = A@2ed2e591
scala> a.aa
res6: Int = 5
scala> a.a
<console>:10: error: value a is not a member of A
a.a
^
第二个描述了一个以a
作为构造函数参数和成员的类。它相当于:
class A(_a : Int) {
val a = _a
}