我很难理解主构造函数及其参数的概念。我已经明白到现在为止是:如果我们定义一个类如下scala中主要构造函数参数的可访问性
class Example(a: Int, b: Int)
Scala编译器生成与上述两个参数的类实例的主要构造。但是,它没有定义字段 a和 b类别示例的定义。但是,如果我们定义
class Example(val a: Int, val b: Int)
Scala编译器生成的主构造如上,并增加了在类定义两个字段。
现在的问题,当我试图像
class PrimaryConstructor(a: Int, b: Int){
override def toString() = "PrimaryConstructor(" + this.a + ", " + this.b + ")"
}
一个例子上面的代码编译好,即使没有名为领域既一个或 b来。我无法理解,如果没有任何字段,那么我如何使用这个来访问它们:当前的对象引用。
object Main{
def main(args: Array[String]){
val primaryConstructor = new PrimaryConstructor(1, 2)
println(primaryConstructor.a)
}
}
虽然如果我尝试从上面的类定义的外侧访问它们,编译后会出现以下错误消息。
error: value a is not a member of PrimaryConstructor
println(primaryConstructor.a)
我可以理解这一点。但是,如何使用这个访问这些字段?请帮我理解这一点。
如果您有一些JavaScript经验,请尝试放弃Java类的概念,而将类视为关闭(函数)作为主构造函数中的参数。 “作为封闭的一切”这个概念是scala的核心概念,一旦你喜欢它,它是非常强大的。主构造函数确保有一个类的关联状态的单一规范表示。 –