Scala:检查对象是否为Numeric
发布时间:2020-12-16 09:14:42 所属栏目:安全 来源:网络整理
导读:模式匹配是否可能检测到某物是数字?我想做以下事情: 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 ##} 但是,
模式匹配是否可能检测到某物是数字?我想做以下事情:
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和Double这样的超类型,它是一个类型类.我也不能像def等于[N:Numeric](o:N)这样做,因为o必须是任何适合于等于的合同. 那么如何在没有列出每个已知的Numeric类(包括我猜,用户定义的类,我可能甚至不知道),我怎么做? 解决方法
原来的问题是无法解决的,这里是我的推理原因:
要确定类型是否是类型类的实例(例如Numeric),我们需要隐式解析.隐式解析在编译时完成,但我们需要在运行时完成.这是不可能的,因为据我所知,Scala编译器不会在编译的类文件中留下所有必要的信息.要看到,可以使用包含一个局部变量的方法来编写一个测试类,它具有隐式修饰符.删除修饰符时,编译输出不会改变. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |