下面從這個問題Why cannot this.type be used for new instances有點。我想在構造函數中有一個this.type對象。我不相信這是可以做到的,但我希望這裏有人知道一個方法!
這是我的基地特質this.type作爲構造函數的參數
trait Node {
def parent:Option[this.type]
}
,我已經實現了一個類,如下所示
case class NodeInstance(parentValue:Option[NodeInstance]) extends Node {
def parent = parentValue.asInstanceOf[Option[this.type]]
}
,但我想有
case class NodeInstance(parent:Option[NodeInstance]) extends Node
但是,這給出了一個壓倒一切的方法父具有不兼容的類型異常。
我想,我不能有此作爲繼承NodeInstance(如果它是一類說的)一個對象,會打破this.type要求。不過,我想,我會檢查,看看是否存在解決這個更好的辦法...
現在如果我用
trait Node[T] { self:T =>
def parent:Option[T]
}
而且我希望有一個功能「根」,它返回根節點,如果我在嵌入式特質它
trait Node[T] { self:T =>
def parent:Option[T]
def root:T = this.parent.map(_.root).getOrElse(this)
}
然後我得到的編譯器的異常值根本不是類型參數T的成員
如果我抽象出來的根,我再拿到類型參數問題S代表牛逼
object Node {
def root[T <: Node[?]](node:T):T = node.parent.map(root(_)).getOrElse(this)
}
OK,剛發現我可以有[T <:節點[T]
值得一補充說,'當我們在談論相同的對象,'這this.type',才應使用'(例如,當在一個可鏈接的setter中返回'this'時),而不應該被用來表示「與'this'類型相同的其他對象。 – 2013-04-09 13:19:09
在這種情況下說我創建一個函數 def getAncestors [T <:Node](node:T):List [T] 然後我有一個遞歸類型參數問題 – 2013-04-09 13:26:24
@JPullar'def getAncestors [T < :Node [T]](node:T):List [T]'? – EECOLOR 2013-04-09 13:39:18