我想知道是否有可能抽象出案例类的复制方法.基本上我有类似的东西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方法,其目标是生成对象的完美副本,这似乎是您想要的.
归档时间: |
|
查看次数: |
11589 次 |
最近记录: |