我是scala的初学者,我有一个非常简单的代码来实现一个树。我想让它变为Iterable,这样我就可以使用迭代器遍历这个树中的每个元素。不幸的是,IntelliJ显示错误。
类型迭代器[A]的表达式不符合预期的类型迭代器[A]
其中指的是Node类中的迭代器方法。 在我的代码下面:
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*
}
这里有什么问题?
答案 0 :(得分:3)
您需要在实施Iterable
时添加通用参数:
abstract class MyTreeItem[A] extends Iterable[A]
如果没有它,MyTreeItem[A]
的类型为Iterable[Any]
,并且在最后一行连接迭代器的同时也是Iterable[Any]
,这当然不能分配给Iterable[A]
。