Соглашение об именовании Scala для «сеттеров» для неизменяемых объектов

Я не знаю, как называть мои "сеттеры" на неизменяемых объектах?

Для изменяемого объекта Person сеттеры работают следующим образом:

class Person(private var _name: String) {
  def name = "Mr " + _name
  def name_=(newName: String) {
    _name = newName
  }
}

val p = new Person("Olle")
println("Hi "+ p.name)
p.name = "Pelle"
println("Hi "+ p.name)

Это все хорошо, но что, если Person неизменяем?

class Person(private val _name: String) {
  def name = "Mr " + _name
  def whatHereName(newName: String): Person = new Person(newName)
}

val p = new Person("Olle")
println("Hi "+ p.name)
val p2 = p.whatHereName("Pelle")
println("Hi "+ p2.name)

Как следует называть whatHereName ?

РЕДАКТИРОВАТЬ: Мне нужно поместить что-то в метод "установщика", например:

class Person(private val _name: String) {
  def name = "Mr " + _name
  def whatHereName(newName: String): Person = {
    if(name.length > 3)
      new Person(newName.capitalize)
    else
      throw new Exception("Invalid new name")
  }
}

Настоящий код намного больше этого, поэтому простой вызов метода copy не годится.

EDIT 2 :

Поскольку на мой фальшивый пример так много комментариев (что он неверен), я лучше дам вам ссылку на настоящий класс ( Аватар ).

методы "установки", которые я не знаю, что вызывать, это updateStrength , updateWisdom ... но я, вероятно, скоро изменю их на withStrength ..

8
задан Cœur 2 August 2017 в 04:58
поделиться