(Почему вы хотите использовать var
при возврате нового объекта в chngName
?)
Как уже было сказано, одноименное поле класса затеняет аргумент метода.
Конечно, вы можете переименовать его перед входом в область видимости:
def chngName(name:String) = {
val _name = name
new Person() { name = _name }
}
Однако для этого варианта использования есть несколько других вариантов. Однако это зависит от того, хотите ли вы скопировать объект, т.е. вернуть new Person
или, если достаточно простого изменения var
.
Если вы хотите вернуть совершенно новый объект, вы можете рассмотреть возможность использования case class
, который добавляет метод copy
с той же семантикой и аргументами метода с одинаковыми именами. (Таким образом, вы можете использовать именованные аргументы):
case class Person(name: String)
val p = Person("bob")
p.name // bob
val q= p.copy(name = "aa")
q.name // aa
q == p // false