0

これは常に私を悩ませます:

class Test(i: Int) {
  val this.i = i;
  val this.ii = i; // :(
}

すべての vals/vars を同じ方法で宣言したいのですが、なぜこれが Scala コンパイラーを混乱させるのか本当に理解できません。ここを除いて、他のどこでもこれは期待どおりに機能します。

  1. これをパンチさせない正当な理由はありますか?
  2. より良い方法/回避方法/Scalaの方法ありますか?
4

2 に答える 2

9

そのスコープで宣言するすべての変数はフィールドになります。したがって、特別な構文は必要ありません。

class Test(_i: Int) {
  val i = _i
  val ii = i
}

またはさらに良い:

class Test(val i: Int) {
  val ii = i
}

より明確で小さいコードまたは「一貫性のある」コードを使用するかどうかに応じて、どちらの方法でも記述できます。

于 2012-10-13T07:09:10.367 に答える
3

スカラの方法は使用しないことthisです。なぜこれをJavaで使用するのですか?静的メンバーではなく、インスタンスのメンバーにアクセスしていることを明確にするため。静的メンバーは存在せず、コンパニオンオブジェクトのメンバーにはコンパニオンオブジェクトの名前のプレフィックスを付ける必要があるため、これはScalaでは必要ありません。

于 2012-10-13T06:52:13.277 に答える