Scala的参数字段和构造函数参数

Hbf*_*Hbf 7 scala

我知道参数字段(如下x例所示)的行为与普通字段相同; 所以你可以在方法中引用它们:

class Test(val x: Int) { // x is a parametric field
  override def toString = "Test: " + x;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果删除关键字val,代码仍会编译(并且查看和.class输出x仍然是类的成员).所以我想知道,参数字段(即val x: Int上面的)和构造函数参数(x: Int)之间有什么区别?

(在我的脑海中,我希望构造函数的范围x可能包括类似的方法toString.)

Nic*_*las 10

没有val关键字,您的代码类似于:class Test (private[this] val x: Int) { ... }.因此,x可以在全班使用,但不能从外部使用.

在你的问题中没有提到它,但它也可能有用:在case class默认修饰符中val.因此case class Test(x: Int) {...}相当于case class (val x: Int) {...}.

  • 当然,等同于减去"案例类"所具有的所有其他东西.:-) (2认同)