如何在Scala中为Simple类编写copy()方法

时间:2015-07-30 10:24:56

标签: scala

我有一个班级人员

class Person(val name: String, val height : Int, val weight: Int)

我想为我的类编写copy()方法,该方法可以与复制方法对case case一样工作(复制和更新对象的属性)

我知道copy()附带了案例类,但我没有使用它们所以我想为我的班级做同样的事情

请指导我该怎么做?

2 个答案:

答案 0 :(得分:11)

只需创建一个复制方法,其中包含类定义中的所有字段作为参数,但使用现有值作为默认参数,然后使用所有参数创建新实例:

class Person(val name: String, val height : Int, val weight: Int) {

  def copy(newName: String = name, newHeight: Int = height, newWeight: Int = weight): Person = 
    new Person(newName, newHeight, newWeight)

  override def toString = s"Name: $name Height: $height Weight: $weight"
}

val person = new Person("bob", 183, 85)

val heavy_person = person.copy(newWeight = 120)

val different_person = person.copy(newName = "frank")

List(person, heavy_person, different_person) foreach {
  println(_)
}

答案 1 :(得分:0)

copy方法中为参数使用相同的名称将使其与案例类中的copy方法相似。

class Person(val name: String, val height: Int, val weight: Int) {
  def copy(
      name: String = this.name,
      height: Int = this.height,
      weight: Int = this.weight,
  ) = new Person(name, height, weight)
}

copy方法可以按如下方式使用。

val john = new Person("John", 89, 160)
val joe = john.copy(name = "Joe")