Рассмотрим следующий код:
// 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
. В любом случае я буду взламывать код клиента, не так ли?
Есть ли возможность обойти это? Или это врожденная проблема с именованными аргументами?
Пожалуйста, пролите немного света на это. Любая помощь будет принята с благодарностью.
Спасибо.