我想要得到斯卡拉特質和案例類的掛鉤。以下是對this question的跟進。斯卡拉價值是不是類型參數的成員
假設我有一個簡單的類和一個擴展它的對象。
sealed trait Operations{
def add(a:Double,b:Double):Double
def multiply(a:Double,b:Double):Double
}
case object CorrectOperations extends Operations{
def add(a:Double,b:Double):Double = a+b
def multiply(a:Double,b:Double):Double= a*b
}
現在我有一些功能,這將使使用Operations
類型的任何對象,如,
def doOperations(a:Double,b:Double, op:Operations)={ op.multiply(a,b) - op.add(a,b)}.
這個效果很好,但我的問題是如何推廣的類型特徵Operations
的,所以我們不只是在談論Doubles
。所以我想爲特徵Operations
設置通用類型,然後爲每個對象輸入規格。
使用類型泛型,我試圖
sealed trait Operations[T]{
def add(a:T,b:T):T
def multiply(a:T,b:T):T
}
case object CorrectOperations extends Operations[Double]{
def add(a:Double,b:Double):Double = a+b
def multiply(a:Double,b:Double):Double= a*b
}
def doOperations[T](a:T,b:T, op:Operations[T])={ op.multiply(a,b) - op.add(a,b) },
與編譯錯誤在doOperations
- 「值 - 是不是類型參數T的成員」。
因此我們知道op.multiply(a,b)
將返回類型T
,並且該錯誤將指示類型T
沒有.-
方法。
我該如何思考如何實現Operations
這個特徵的泛化?由於
+1提的數字。另外,看看Numeric如何添加Ops類以讓您使用'-'而不是'subtract' –