在Scala中声明类字段的一致方法

adr*_*on3 0 constructor scala

这经常让我感到困惑:

class Test(i: Int) {
  val this.i = i;
  val this.ii = i; // :(
}
Run Code Online (Sandbox Code Playgroud)

我想以同样的方式声明我的所有val/vars,我真的不明白为什么这会扰乱Scala编译器.在其他地方这个执行如预期,除了这里.

  1. 是否有一个很好的理由,为什么它不会让我冲在
  2. 是否有更好的方式/方式/Scala方式

mis*_*tor 9

您在该范围内声明的每个变量都将成为一个字段.所以它不保证特殊的语法.

class Test(_i: Int) {
  val i = _i
  val ii = i
}
Run Code Online (Sandbox Code Playgroud)

甚至更好:

class Test(val i: Int) {
  val ii = i
}
Run Code Online (Sandbox Code Playgroud)

你可以用任何一种方式编写它,这取决于你是想要更清晰和更小的代码还是"一致"的代码.