Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
深入克隆(复制)可变Scala对象的最简单方法是什么?_Scala_Clone - Fatal编程技术网

深入克隆(复制)可变Scala对象的最简单方法是什么?

深入克隆(复制)可变Scala对象的最简单方法是什么?,scala,clone,Scala,Clone,深入克隆(复制)可变Scala对象的最简单方法是什么?一个Java特定的解决方案(在Scala中也应该很有用)是。它快速、简单、基于字段深度克隆对象(使用反射),并且足够聪明,不会克隆已知的不可变对象(如字符串、整数等)。最后,您可以注册自定义的不可变对象,这样它也不会克隆它们 我强烈推荐它。因为您想要的是最简单的深度复制Scala对象的方法,而不是最快的方法,所以只要对象是可序列化的,就可以将其序列化,然后再反序列化回来。以下代码仅在编译时运行,而不是在REPL中运行 def deepCopy

深入克隆(复制)可变Scala对象的最简单方法是什么?

一个Java特定的解决方案(在Scala中也应该很有用)是。它快速、简单、基于字段深度克隆对象(使用反射),并且足够聪明,不会克隆已知的不可变对象(如字符串、整数等)。最后,您可以注册自定义的不可变对象,这样它也不会克隆它们


我强烈推荐它。

因为您想要的是最简单的深度复制Scala对象的方法,而不是最快的方法,所以只要对象是可序列化的,就可以将其序列化,然后再反序列化回来。以下代码仅在编译时运行,而不是在REPL中运行

def deepCopy[A](a: A)(implicit m: reflect.Manifest[A]): A =
  util.Marshal.load[A](util.Marshal.dump(a))

val o1 = new Something(...) // "Something" has to be serializable
val o2 = deepCopy(o1)

我第一次听说克隆人图书馆。听起来很方便!谢谢你提到克隆人图书馆。在我的spark scala代码中工作得很有魅力。我做了一点,但我一直得到ClassNotFoundException(并且case类是可序列化的)。