加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala – 将Int隐式转换为数字[Int]

发布时间:2020-12-16 09:28:01 所属栏目:安全 来源:网络整理
导读:我已经创建了一个类,可以通过任何可以转换为数字的东西进行参数化 class Complex[T % Numeric[T]] (val real : T,val imag : T) { //... complex number methods ...} 然后我尝试在代码中的其他地方: var myComplex = new Complex(0,1) 这会引发编译错误,因
我已经创建了一个类,可以通过任何可以转换为数字的东西进行参数化

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(线性代数)项目.接下来,我想介绍一个Trait,它描述了矩阵中元素的责任(主要是just和*运算符)以及对复杂数字的改进支持到矩阵操作库中.

解决方法

你错了.正确的用法是这样的:

class Complex[T](val real : T,val imag : T)(implicit num: Numeric[T]) {
   import num._ // make implicit conversions available
   //... complex number methods ...
}

它与有序和有序之间的差异相同. Ordered [T]实例可以与T进行比较,而Ordering [T]提供了一种比较几个T的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读