为什么班级成员应该添加" var" /" val"或者我们无法访问他们?

时间:2015-05-13 08:25:24

标签: scala

为什么班级成员应该添加" 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

两个班级有什么区别?

1 个答案:

答案 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 
}