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