4
嗨我碰到這段代碼,但無法理解這一點。令人困惑的地方是「V <:Vector [V]」,這意味着V是Vector [V]的子類型?這裏很混亂。V <:Vector [V]在scala中的含義是什麼?
trait Vector[V <: Vector[V]] { this: V =>
def +(other: V): V
}
嗨我碰到這段代碼,但無法理解這一點。令人困惑的地方是「V <:Vector [V]」,這意味着V是Vector [V]的子類型?這裏很混亂。V <:Vector [V]在scala中的含義是什麼?
trait Vector[V <: Vector[V]] { this: V =>
def +(other: V): V
}
這就是所謂的F-bounded type polymorphism和
通常嘗試當有人試圖解決一個共同的問題 在面嚮對象語言的抽象:如何定義,雖然在定義一個 多態函數超類的條款, 將傳遞一些子類型的值將始終返回值爲 相同的子類型作爲其參數。
(從最近的一篇博客 「F-Bounded Type Polymorphism Considered Tricky」 由Kris Nuttycombe)
也看到這個問題的SO:What does "Recursive type bound" in Generics mean?