我创建了一个可以通过任何可以转换为数字的东西来参数化的类
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 方法。
我确信我缺少一些基本的东西(正如你所知道的,我是 Scala 的新手),所以我会很感激你朝着正确的方向前进。
正如您从示例中看到的那样,我试图让一个复杂的数字实现工作,它可以接受和使用任何数字类型。我希望将其贡献给 scalala(线性代数)项目。接下来,我想介绍一个描述矩阵中元素职责的特征(主要只是 + 和 * 运算符),并将对复数的支持改进到矩阵操作库中。