Scala:检查对象是否为Numeric

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不是东西,像超IntDouble,这是一个类型类.我也做不了什么,def equals[N: Numeric](o: N)因为o必须Any要符合合同equals.

那么我怎么做而不列出每个已知的Numeric类(包括,我想,用户定义的类我可能都不知道)?

Kim*_*bel 5

最初的问题无法解决,这是我的理由:

为了确定类型是否是类型类的实例(例如Numeric),我们需要隐式解析。隐式解析在编译时完成,但我们需要在运行时完成。目前这是不可能的,因为据我所知,Scala编译器不会在编译的类文件中保留所有必要的信息。要看到这一点,可以编写一个测试类,其方法包含一个包含隐式修饰符的局部变量。删除修改器后,编译输出不会更改。