2014-06-30 45 views
0

ast是使用案例类编写的,它的嵌套层次很大。解析后,我想要有一个深层副本,并独立操作副本。如何在scala中创建抽象语法树的深层副本?

+3

如果它是不可变的没有必要做一个深拷贝 – sschaef

+0

顺便说一句,目前还不清楚你问什么。 AST是由你自己写的还是由lib写的? – sschaef

+0

@sschaef我曾有过我不得不复制的情况,因为我们与'eq'进行了比较。 – Kigyo

回答

2

就像@AlexeyRomanov说的,你可以自己写一个递归复制函数。

一个小例子:

trait A 
case class B(a0: A, a1: A) extends A 
case class C(value: Int) extends A 

def copy(a: A): A = a match { 
    case B(a0, a1) => B(copy(a0), copy(a1)) 
    case C(value) => C(value) 
} 

val a = B(C(0), B(C(1), C(2))) 
val aCopy = copy(a) 

a == aCopy //true 
a eq aCopy //false