假设我在Scala中有一个课程:
class Class123(val val1: Int, val val2: String, val val3: AnotherClass, val val4: AnotherClass2)
//I create Class123 somehow, it doesn't matter how exactly
val class123_1: Class123 = parseClass123()
现在我想要创建Class123
的另一个实例与class123_1
完全相同,除了最后一个参数val4
,我希望它与众不同:
val class123_2 = // the same as class123_1 but with different last parameter val4
我该怎么做?
答案 0 :(得分:2)
将课程转到案例类:
scala> case class Class123(val val1: Int, val val2: Int, val val3: Int, val val4: Int)
// defined class Class123
scala> val foo = Class123(1,2,3,4)
// foo: Class123 = Class123(1,2,3,4)
scala> val bar = foo.copy(val4 = -4)
// bar: Class123 = Class123(1,2,3,-4)
答案 1 :(得分:2)
您可以使用案例类并指定要按名称更改的参数。
val class123 = new Class123(...)
val copy = class123.copy(val4 = ...)
这是在Scala 2.8中引入的,并且有more info here。
答案 2 :(得分:2)
所有copy
es。
case class
您应该将您的类定义为案例类:
case class Class123(val1: Int, val2: String, val3: AnotherClass, val4: anotherClass2)
val c1: Class123 = ???
val c2 = c1.copy(val4 = newValue)
如果您不想让您的班级成为案例类,您可以自己定义此类方法:
class Class123(val val1: Int, val val2: String, val val3: AnotherClass, val val4: anotherClass2) {
def copy(val1: Int = val1, val2: String = val2, val3: AnotherClass = val3, val4: anotherClass2 = val4) =
new Class123(val1, val2, val3, val4)
}
答案 3 :(得分:2)
copyWith
方法,也适用于“非案例类”。您可以将他的特质用作任何课程的混音。