gpt4 book ai didi

scala - 我们可以将 Any 与泛型类型匹配吗? [斯卡拉 2.8]

转载 作者:行者123 更新时间:2023-12-04 17:04:53 27 4
gpt4 key购买 nike

如果之前已经回答过这个问题,请指出我正确的链接。

我有这个代码:

def getResult(a:Any):Any = a

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

这给了我一个 unchecked warning一切都与 T 匹配.例如,当我做 getAnswer[Int](2) , 我得到 Some(2) (如预期)。但是,如果我这样做 getAnswer[String](2) , 我也收到 Some(2)这是意料之中的(我需要 None )。

有什么方法可以解决类型删除问题并以某种方式获得 getAnswer正常工作(即,返回 Some(result) 当且仅当结果类型为 T )?

提前致谢。

最佳答案

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
}

正如 Alexey 所写,您在使用原语时遇到了一些麻烦。在这种情况下,Scala 源代码中使用的技术总是涉及每个原始类型的单独匹配,所以我想没有办法解决。

关于scala - 我们可以将 Any 与泛型类型匹配吗? [斯卡拉 2.8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com