0
ast是使用案例類編寫的,它的嵌套層次很大。解析後,我想要有一個深層副本,並獨立操作副本。如何在scala中創建抽象語法樹的深層副本?
ast是使用案例類編寫的,它的嵌套層次很大。解析後,我想要有一個深層副本,並獨立操作副本。如何在scala中創建抽象語法樹的深層副本?
就像@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
如果它是不可變的沒有必要做一個深拷貝 – sschaef
順便說一句,目前還不清楚你問什麼。 AST是由你自己寫的還是由lib寫的? – sschaef
@sschaef我曾有過我不得不復制的情況,因爲我們與'eq'進行了比較。 – Kigyo