代码之家  ›  专栏  ›  技术社区  ›  CodingNow

scala:尝试连接两个列表或创建列表时类型不匹配

  •  0
  • CodingNow  · 技术社区  · 7 年前

    尝试串联两个列表或创建列表时,类型不匹配。

    我试图用Scala实现一个非常简单的二叉树,并进行有序遍历, 并将树节点的值插入 List 在遍历过程中返回 列表 当遍历完成时。

    我的树定义如下:

    abstract class Tree[+T]
    
    case class Node[T](v: T, lft: Tree[T], rght: Tree[T]) extends Tree
    
    case class Leaf[T](v: T) extends Tree
    

    我的顺序遍历方法如下:

    object prog {
        def inorder[T](t: Tree[T]): List[T] = t match {
            case Node(v, lft, rght) => inorder(lft) ++ (v::inorder(rght))
            case Leaf(lf) => List(lf)
        }
    }
    

    Scala编译器拒绝该代码,并显示以下错误消息:

    tree.scala:28: error: type mismatch;
     found   : List[Any]
     required: List[T]
            case Node(v, lft, rght) => inorder(lft) ++ (v::inorder(rght))
                                                    ^
    tree.scala:29: error: type mismatch;
     found   : lf.type (with underlying type Any)
     required: T
            case Leaf(lf) => List(lf)
                                ^
    two errors found
    

    我google了很多次,但无法找出我的代码出了什么问题。任何暗示都是 非常感谢。

    1 回复  |  直到 7 年前
        1
  •  3
  •   CodingNow    7 年前
    case class Node[T](v: T, lft: Tree[T], rght: Tree[T]) extends Tree
    
    case class Leaf[T](v: T) extends Tree
    

    应该是:

    case class Node[T](v: T, lft: Tree[T], rght: Tree[T]) extends Tree[T]
    
    case class Leaf[T](v: T) extends Tree[T]