1

次のコードを検討してください。

// My code
class Person(var age: Int)

// Client's code
object Main {
  def main(args: Array[String]) {
    val p = new Person(age = 18)
    println(p.age)
  }
}

後で、フィールドのアクセサ メソッドを定義する必要があるとしますage

ただし、Scala ではフィールド名とメソッド名が同じ名前空間を共有しているため、以下のようなことを試みることは正当ではありません。

// *** DOES NOT COMPILE ***
// My code
class Person(age: Int) {
  def age = /* some code that gives integer */
}

// Client's code
object Main {
  def main(args: Array[String]) {
    val p = new Person(age = 18)
    println(p.age)
  }
}

したがって、コンストラクタ引数ageまたはフィールドの名前を変更する必要がありますage。いずれにせよ、クライアント コードを壊すことになりますね。

これを回避する方法はありますか? それとも、これは名前付き引数に固有の問題ですか?

これに光を当ててください。どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

2

2 番目のコード ブロック/* some code that gives integer */、プレースホルダー コメントの代わりに何かを配置すると、コンパイルされます。

于 2010-02-24T19:27:56.060 に答える