这是我之前question的后续内容。
我编写了一个简单的函数,它比RuleTransformer
def trans(node: Node, pf: PartialFunction[Node, Node]): Node = {
val n1 = if (pf.isDefinedAt(node)) pf(node) else node
n1 match {
case e: Elem => e.copy(child = e.child map (c => trans(c, pf)))
case other => other
}
}
有意义吗?您如何纠正/改进该代码?
答案 0 :(得分:1)
这些天我似乎对if
陈述过敏,所以如果是我的代码,唯一的调整是使用PartialFunction
的applyOrElse
来消除:
def trans2(node: Node, pf: PartialFunction[Node, Node]): Node = {
val n1 = pf.applyOrElse(node, identity[Node])
n1 match {
case e: Elem => e.copy(child = e.child map (c => trans2(c, pf)))
case other => other
}
}
我是第一个承认“显而易见性”可能已经减少的人:-(