我写了以下代码:
def combine(trees: List[CodeTree]): List[CodeTree] = {
if (trees.length >= 2) makeCodeTree(trees.head, trees.tail.head) :: trees.tail.tail
else trees
}
它给出了以下结果(我期望的结果):
res0: List[patmat.Huffman.CodeTree] = List(Fork(Leaf(a,3),Leaf(c,3),List(a,c),6), Leaf(b,6))
我的代码存在的问题是看起来不太好看。
所以我决定将它重构为(与模式匹配):
def combine(trees: List[CodeTree]) : List[CodeTree] = trees match {
case t1 :: t2 :: ts => makeCodeTree(t1,t2) :: ts
case _ => trees
}
我希望与之前的代码示例相同。
但我不明白为什么我的Scala工作表中出现此错误(NoSuchMethodError)。我该如何解决?
请注意,以下代码适用于模式匹配,但(如预期的那样)我得到了错误的答案。
def combine(trees: List[CodeTree]): List[CodeTree] = trees match {
case t1 :: t2 :: ts => ts
case _ => trees
}
答案 0 :(得分:0)
如果CodeTree不是案例类,则需要使用apply和unapply方法创建伴随对象。使用案例类,您可以在后台免费获得这些方法,它们是模式匹配所必需的。