Scala 2.8 - потенциальная проблема с именованными аргументами - PullRequest
1 голос
/ 24 февраля 2010

Рассмотрим следующий код:

// 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. В любом случае я буду взламывать код клиента, не так ли?

Есть ли возможность обойти это? Или это врожденная проблема с именованными аргументами?

Пожалуйста, пролите немного света на это. Любая помощь будет принята с благодарностью.

Спасибо.

1 Ответ

2 голосов
/ 24 февраля 2010

Второй блок кода компилируется при условии, что вы поместили что-то вместо комментария-заполнителя /* some code that gives integer */.

...