3
我有一個樹對象,實現惰性深度優先搜索作爲TraversableView
。我可以離開我的自定義Scala 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
做更多的事情?
即使這是正確的,我絕不會推薦使用'null'這樣的。相反,嘗試拋出一個描述性的異常,以便如果'底層'永遠不會被調用,你就會知道何時何地,而不是在'null'值傳播到其他地方之後得到一個令人困惑的空指針異常。 – DaoWen