2015-08-26 5 views
2

Я новичок в scala, и у меня очень простой код, который реализует дерево. Я хотел бы сделать это Iterable, чтобы я мог использовать итератор, чтобы пройти через каждый элемент этого дерева. К сожалению, IntelliJ показывает ошибку.Выражение типа Iterator [A] не соответствует ожидаемому типу Iterator [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* 
} 

Что такое проблема?

ответ

3

Что вам нужно, это добавление общий параметр при реализации Iterable:

abstract class MyTreeItem[A] extends Iterable[A] 

Без него MyTreeItem[A] имеет тип Iterable[Any] и конкатенации итераторы на последней строке имеет infered тип также Iterable[Any], который, конечно, не присваивается Iterable[A].

+0

Все работает отлично! Большое спасибо :) – DorianOlympia