我已經創建了一個可以通過什麼進行參數設置一類,它可以在代碼的其他地方被轉換成數字斯卡拉 - 詮釋對數值[INT]隱式轉換
class Complex[T <% Numeric[T]] (val real : T, val imag : T) {
//... complex number methods ...
}
然後我嘗試:
var myComplex = new Complex(0, 1)
這會引發編譯錯誤,因爲(令人驚訝的是)Int和Numeric [Int]之間或Int和Integral [Int]之間沒有隱式轉換。
我錯過了什麼嗎?有沒有一種隱式轉換,我沒有看到?
在Numeric.scala中定義了一個名爲IntIsIntegral的隱式對象。我用這個來創建自己的隱式轉換方法的嘗試:
def implicit intToNumericInt(val i : Int)(implicit n : IntIsIntegral) = n.fromInt(i)
我很驚訝,這是必需的,無論如何,這似乎導致無限遞歸到.fromInt方法。我敢肯定,我錯過了一些基本的東西(正如你可以說的,我是斯卡拉的新手),所以在正確的方向上我會感激一點。
從示例中可以看出,我試圖獲得一個可以接受和使用任何數字類型的複雜數字實現。我希望將這個貢獻給scalala(線性代數)項目。接下來,我想介紹一個描述矩陣元素責任的特性(主要是+和*運算符),並將複數的支持加入到矩陣操作庫中。
從我明白,則: Ť<%數值[T] 是用於將語法糖(隱式NUM:數字[T]) 但我想使用糖意味着我沒有可變可以做的: import num._ //使隱式轉換可用 我確實嘗試過(隱含的num:Numeric [T]),但它不適用於我。明天我會報告是否導入num._幫助!謝謝。 – 2010-10-27 13:06:14
@David:'T <%Numeric [T]'是添加'(隱式ev:T =>數字[T])'的語法糖,'T:Numeric [T]'是一個語法糖, (隱含的ev:數字[T])'。第一個被稱爲視圖邊界,第二個被稱爲類型邊界。 – missingfaktor 2010-10-27 13:24:57
@missingfaktor第二個稱爲上下文綁定,恰好用於類型模式。 – 2010-10-27 13:28:47