考虑以下示例:
def combine(trees: List[CodeTree]): List[CodeTree] =
if (trees.isEmpty || singleton(trees)) trees
else trees match {
case Leaf(cl, wl) :: Leaf(cr, wr) :: tail =>
Fork(new Leaf(cl, wl), new Leaf(cr, wr), List(cl, cr), wl + wr) :: tail
}
我想知道是否可以将两个Leaf
实例捕获到变量中。我希望语法如下:
def combine(trees: List[CodeTree]): List[CodeTree] =
if (trees.isEmpty || singleton(trees)) trees
else trees match {
case l: Leaf(cl, wl) :: r: Leaf(cr, wr) :: tail =>
Fork(l, r, List(cl, cr), wl + wr) :: tail
}
这实际上并没有编译,但我希望有类似的东西。
提前致谢!
答案 0 :(得分:4)
你对类型使用冒号,所以你必须写这样的东西:
case (l: Leaf[???]) :: (r: Leaf[???]) :: tail =>
但是有一种匹配模式并同时提取它的方法,即使用" at"签名:
case (l @ Leaf(cl, wl)) :: (r @ Leaf(cr, wr)) :: tail =>
PS:我不知道在哪里需要括号,所以无论如何我都加了它们。