dhg*_*dhg 14 scala numeric typeclass
模式匹配是否可以检测某些东西是否是Numeric?我想做以下事情:
class DoubleWrapper(value: Double) {
override def equals(o: Any): Boolean = o match {
case o: Numeric => value == o.toDouble
case _ => false
}
override def hashCode(): Int = value ##
}
Run Code Online (Sandbox Code Playgroud)
但是,当然,这并不真的是因为工作Numeric不是东西,像超Int和Double,这是一个类型类.我也做不了什么,def equals[N: Numeric](o: N)因为o必须Any要符合合同equals.
那么我怎么做而不列出每个已知的Numeric类(包括,我想,用户定义的类我可能都不知道)?
最初的问题无法解决,这是我的理由:
为了确定类型是否是类型类的实例(例如Numeric),我们需要隐式解析。隐式解析在编译时完成,但我们需要在运行时完成。目前这是不可能的,因为据我所知,Scala编译器不会在编译的类文件中保留所有必要的信息。要看到这一点,可以编写一个测试类,其方法包含一个包含隐式修饰符的局部变量。删除修改器后,编译输出不会更改。
| 归档时间: |
|
| 查看次数: |
1989 次 |
| 最近记录: |