レイジーな深さ優先検索を として実装するツリー オブジェクトがありますTraversableView
。
import collection.TraversableView
case class Node[T](label: T, ns: Node[T]*)
case class Tree[T](root: Node[T]) extends TraversableView[T, Traversable[_]] {
protected def underlying = null
def foreach[U](f: (T) => U) {
def dfs(r: Node[T]): TraversableView[T, Traversable[_]] = {
Traversable(r.label).view ++ r.ns.flatMap(dfs(_))
}
dfs(root).foreach(f)
}
}
これは魅力的なほど簡潔で、機能しているように見えます。しかし、そのunderlying = null
方法は意味がわからないので緊張します。(IntelliJ は私のためにその行を書きました。)この場合、ツリーの根底にある厳密な表現がないため、正しいかもしれませんが、よくわかりません。
上記のコードは正しいですか、それとももっと何かをする必要がありunderlying
ますか?