我試圖以一種有意義的方式定義以下特征
trait Summable {
def (that: Summable): Summable
}
但是我希望它的型別與 this 的型別相同,所以如果A是Summable,那么我們希望 只有當that是型別A而不是任何其他型別時才作業Summable。
我在檔案中找不到任何這樣做的方法,如果有人有任何我可以閱讀的想法或檔案,我會很高興。
uj5u.com熱心網友回復:
您正在尋找 F 界多型性
trait Summable[A <: Summable[A]] { self: A =>
def (that: A): A
}
現在,您可以創建一個具體的實作,如下所示,
class IntSummable(val i: Int) extends Summable[IntSummable] {
override def (that: IntSummable): IntSummable = new IntSummable(this.i that.i)
}
val is1 = new IntSummable(5)
val is2 = new IntSummable(10)
val is3 = is1 is2
但是像下面這樣的東西不會編譯,
class DoubleInvalidSummable1(val d: Double) extends Summable[DoubleInvalidSummable1] {
override def (that: IntSummable): DoubleInvalidSummable1 = new DoubleInvalidSummable1(this.d that.i)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352643.html
上一篇: a與C 陣列中的 1不同?
下一篇:在Scala中填充所需的行
