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

我们可以将Any与一般类型匹配吗? [Scala 2.8]

发布时间:2020-12-16 18:33:10 所属栏目:安全 来源:网络整理
导读:如果之前已经回答,请指出我正确的链接. 我有这个代码: def getResult(a:Any):Any = adef getAnswer[T](i:Int) = { val result = getResult(i) result match { case t:T = Some(t) case _ = None }} 这给了我一个未经检查的警告,一切都与T匹配.例如,当我做ge
如果之前已经回答,请指出我正确的链接.

我有这个代码:

def getResult(a:Any):Any = a

def getAnswer[T](i:Int) = {
  val result = getResult(i)
  result match {
    case t:T => Some(t)
    case _ => None
  }
}

这给了我一个未经检查的警告,一切都与T匹配.例如,当我做getAnswer [Int](2)时,我得到一些(2)(如预期的那样).但是,如果我确实得到了答案[String](2),我也得到了一些不期望的Some(2)(我需要None).

有没有办法解决类型擦除,并以某种方式让getAnswer正常工作(即,当且仅当结果是T类型时,返回Some(结果))?

提前致谢.

解决方法

def getAnswer[T](i:Any)(implicit m:Manifest[T]) = i match {
    case t:Int if m.erasure == classOf[Int] => Some(t)
    case t:Double if m.erasure == classOf[Double] => Some(t)
    //... other Primitives  
    case t if m.erasure.isInstance(t) => Some(t) //this matches AnyRefs
    case _ => None
}

正如阿列克谢所写,你在原语方面遇到了一些麻烦.在这种情况下Scala源中使用的技术总是涉及每个基本类型的单独匹配,所以我想没有办法解决.

(编辑:李大同)

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

    推荐文章
      热点阅读