关于构造器
在scala中,构造器存在于类中,是整个类体。
而构造器所需的所有参数都在类名称之后。看scala编程一书中的一个例子:
class Ration(a:Int, b:Int){
require(b != 0)
override def toString: String = {a + " / " + b}
def add(p: Ration): Ration = {
/*这里编译会报错*/
new Ration(a + p.a, b + p.b)
}
}
在这里add方法想要调用次级构造器里的p的a字段和b字段,编译结果无法通过.主要原因是创建class中参数没有添加val或者var字段,此时在scala中,编译器不会对a、b字段生成getter和setter方法,因此我们无法对其进行访问和修改,从而a和b就自动转化为Ration类的字段了,而不是Ration类的参数。若是想要访问就需要在传入的参数中添加val或者var关键字,或者是将class换成case class。