模式匹配是否可以检测某物是否是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(使用前将#替换为@)