加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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编译器不会在编译的类文件中留下所有必要的信息.要看到,可以使用包含一个局部变量的方法来编写一个测试类,它具有隐式修饰符.删除修饰符时,编译输出不会改变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读