2014-06-30 47 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