scala模式匹配错误java.lang.NoSuchMethodError:scala.collection.immutable。$ colon $ colon.hd $ 1()Ljava / lang / Object;

时间:2014-10-15 15:59:03

标签: scala pattern-matching runtime-error

我写了以下代码:

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
}

1 个答案:

答案 0 :(得分:0)

如果CodeTree不是案例类,则需要使用apply和unapply方法创建伴随对象。使用案例类,您可以在后台免费获得这些方法,它们是模式匹配所必需的。