Iterator[A] 类型的表达式不符合预期的 Iterator[A] 类型

Expression of type Iterator[A] doesn't conform to expected type Iterator[A]

我是 scala 的初学者,我有一个实现树的非常简单的代码。我想让它成为 Iterable,这样我就可以使用迭代器遍历这棵树中的每个元素。不幸的是,IntelliJ 显示错误。

Expression of type Iterator[A] doesn't conform to expected type Iterator[A]

指Nodeclass中的iterator方法。 在我的代码下面:

abstract class MyTreeItem[A] extends Iterable

case class EmptyLeaf[A]() extends MyTreeItem[A] {
  override def iterator: Iterator[A] = Iterator.empty
}

case class Node[A](left: MyTreeItem[A], right: MyTreeItem[A], item: A) extends MyTreeItem[A] {
  *override def iterator: Iterator[A] = Iterator.single(item) ++ left.iterator ++ right.iterator*
}

这里有什么问题?

你需要的是在实现时添加泛型参数 Iterable:

abstract class MyTreeItem[A] extends Iterable[A]

没有它,MyTreeItem[A]Iterable[Any] 类型,最后一行的串联迭代器也推断出类型 Iterable[Any],当然,这不能分配给 Iterable[A].