gpt4 book ai didi

scala - 在 Scala 中实现 '.clone'

转载 作者:行者123 更新时间:2023-12-04 21:58:59 26 4
gpt4 key购买 nike

我想弄清楚如何.clone我自己的对象,在 Scala 中。

这是用于模拟,因此必须具有可变状态,因此需要克隆。在提前模拟时间之前,我将克隆整个状态结构。

这是我目前的尝试:

abstract trait Cloneable[A] {
// Seems we cannot declare the prototype of a copy constructor
//protected def this(o: A) // to be defined by the class itself

def myClone= new A(this)
}

class S(var x: String) extends Cloneable[S] {
def this(o:S)= this(o.x) // for 'Cloneable'
def toString= x
}

object TestX {
val s1= new S("say, aaa")
println( s1.myClone )
}

一种。为什么以上不编译。给出:

错误:需要类类型但找到 A
def myClone= new A(this)
^

湾有没有办法在特征中声明复制构造函数( def this(o:A) ),以便显示使用特征的类需要提供一个。

C。说 abstract trait有什么好处吗? ?

最后,有没有更好的标准解决方案来解决所有这些问题?

我已经研究过 Java 克隆。似乎不是为了这个。还有 Scala copy不是 - 它仅适用于案例类,它们不应该具有可变状态。

感谢您的帮助和任何意见。

最佳答案

Traits 不能定义构造函数(我认为 abstract 对 trait 没有任何影响)。

是否有任何理由需要使用复制构造函数而不仅仅是实现克隆方法?可能不必在类上声明 [A] 类型,但我至少已经声明了一个 self 类型,因此编译器将确保该类型与该类匹配。

trait DeepCloneable[A] { self: A =>
def deepClone: A
}

class Egg(size: Int) extends DeepCloneable[Egg] {
def deepClone = new Egg(size)
}

object Main extends App {
val e = new Egg(3)
println(e)
println(e.deepClone)
}

http://ideone.com/CS9HTW

关于scala - 在 Scala 中实现 '.clone',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com