转换XML而不是RuleTransformer的函数

时间:2015-05-21 12:58:32

标签: xml scala

这是我之前question的后续内容。

我编写了一个简单的函数,它比RuleTransformer

更快地转换XML
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
  }
}

有意义吗?您如何纠正/改进该代码?

1 个答案:

答案 0 :(得分:1)

这些天我似乎对if陈述过敏,所以如果是我的代码,唯一的调整是使用PartialFunctionapplyOrElse来消除:

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
  }
}

我是第一个承认“显而易见性”可能已经减少的人:-(