我想知道是否有可能抽象出案例类的复制方法.基本上我有类似的东西sealed trait Op,然后像case class Push(value: Int) extends Op和case class Pop() extends Op.
第一个问题:没有参数/成员的案例类没有定义复制方法.你可以在REPL中试试这个.
scala> case class Foo()
defined class Foo
scala> Foo().copy()
<console>:8: error: value copy is not a member of Foo
Foo().copy()
^
scala> case class Foo(x: Int)
defined class Foo
scala> Foo(0).copy()
res1: Foo = Foo(0)
Run Code Online (Sandbox Code Playgroud)
编译器出现此异常的原因是什么?我认为它是相当单一的,我希望每个案例类都定义一个复制方法.
第二个问题:我有一个方法def ops: List[Op],我想复制所有的操作ops map { _.copy() }.我如何在Op特征中定义复制方法?如果我说的话,我会收到"太多参数"的错误def copy(): Op.但是,由于所有copy()方法都只有可选参数:为什么这不正确?而且,我该怎么做呢?通过为所有案例类创建另一个为所有案例类命名def clone(): Op和写入的方法def clone() = copy()?我希望不是.
Dan*_*ral 12
你似乎是混乱copy与clone.目标copy是制作一个几乎相同的副本,但改变了一些东西.这可能是什么取决于案例类的参数,因此不可能使它成为一种常见的方法.
如果是 case class X(),拥有一个copy方法没有多大意义,因为没有什么可以改变的.
另一方面, clone是一种Java方法,其目标是生成对象的完美副本,这似乎是您想要的.