[英]Scala equivalent of Java's Number with divide method
我想概括這個功能
def selfSufficiency(a: Seq[Double], b: Seq[Double]): Double =
a.sum/b.sum
我嘗試使用此處提供的想法來實現與Doubles,Floats,Ints等一起使用的更通用的功能:
def selfSufficiency[A](a: Seq[A], b: Seq[A])
(implicit n: Numeric[A]):A = {
import n._
a.sum/b.sum
}
但是,我從日食中得到一句話說
值/不是類型參數A的成員。
1-如何以功能/通用的方式實現此功能?
2-我的實現是否限制用戶為兩個輸入使用相同的類型“ A”? 換句話說,我可以使用我的代碼嗎?
selfSufficiency(Seq(1,2,3), Seq(2.0,1.3))
如果不能,請說明如何實施?
請注意,此處的代碼提供了一個玩具示例。 在生產函數中,我加,減,找到較大的數字,依此類推。
問題在於Numeric
不對除法函數進行編碼-您需要Fractional
。
因此,您的代碼成為
def selfSufficiency[A](a: Seq[A], b: Seq[A])
(implicit n: Fractional[A]):A = {
import n._
a.sum/b.sum
}
現在就可以了。
編輯我剛剛閱讀了您問題的這一部分。
我的實現是否限制用戶為兩個輸入使用相同的類型“ A”? 換句話說,我可以使用我的代碼嗎?
由於Fractional
和Numeric
都僅在一個T
中參數化,因此兩個參數都必須來自同一類型-例如,請查看div
函數 。
但是,由於精度較低的數值是精度較高的數值的子類型(圖1) 。 您可以通過upcast使它正常工作,但是您需要更多地幫助編譯器。
selfSufficiency[Double](Seq(1,2,3), Seq(2.0,1.3)) // res1: Double = 1.8181818181818183
注意:如果不將類型指定為Double
,則編譯器將產生以下錯誤。
error: could not find implicit value for parameter n: Fractional[AnyVal]
圖。1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.