Scala:检查对象是否为数字

2024-03-03

模式匹配是否可以检测某物是否是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 ##
}

但这当然不起作用,因为Numeric不是类似的超类型Int and Double,它是一个类型类。我也不能做类似的事情def equals[N: Numeric](o: N)因为o必须Any以适应合同equals.

那么,在不列出所有已知的情况下,我该怎么做呢?Numeric类(我猜,包括我可能不知道的用户定义的类)?


原来的问题是无法解决的,这是我的推理:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala:检查对象是否为数字 的相关文章

随机推荐