Dav*_*den 6 scala numeric scala-2.8
我已经创建了一个类,可以通过任何可以转换为数字的东西进行参数化
class Complex[T <% Numeric[T]] (val real : T, val imag : T) {
//... complex number methods ...
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试在代码中的其他地方:
var myComplex = new Complex(0, 1)
Run Code Online (Sandbox Code Playgroud)
这会引发编译错误,因为(令人惊讶的是)Int和Numeric [Int]之间甚至Int和Integral [Int]之间都没有隐式转换.
我错过了什么吗?在某处我没有看到隐含的转换吗?
在Numeric.scala中定义了一个名为IntIsIntegral的隐式对象.我尝试使用它来创建自己的隐式转换方法:
def implicit intToNumericInt(val i : Int)(implicit n : IntIsIntegral) = n.fromInt(i)
Run Code Online (Sandbox Code Playgroud)
我很惊讶这是必需的,无论如何,它似乎导致无限递归到.fromInt方法.
我确信我遗漏了一些基本的东西(你可以说,我是Scala的新手),所以我会很欣赏正确的方向.
从示例中可以看出,我正在尝试使用可以接受和使用任何数字类型的复数实现.我希望将此贡献给scalala(线性代数)项目.接下来,我想介绍一个Trait,它描述矩阵中元素的责任(主要是+和*运算符),并将复数的改进支持到矩阵操作库中.
Dan*_*ral 10
你错了.正确的用法是这样的:
class Complex[T](val real : T, val imag : T)(implicit num: Numeric[T]) {
import num._ // make implicit conversions available
//... complex number methods ...
}
Run Code Online (Sandbox Code Playgroud)
这是相同的区别在之间Ordered和Ordering.一个Ordered[T]实例可以比作T,而一个Ordering[T]提供了比较AA耦合的方法T.
| 归档时间: |
|
| 查看次数: |
4851 次 |
| 最近记录: |