gpt4 book ai didi

scala - 在 Scala 中,当 TypeTag 可用时如何转换值

转载 作者:行者123 更新时间:2023-12-02 20:09:37 24 4
gpt4 key购买 nike

给定

  • Any 类型的值
  • 与所需类型相对应的TypeTag

如何转换值

不幸的是,以下代码片段无法编译

val v: Any = 123
val tag = typeTag[Int]
val i = v.asInstanceOf[t.tpe]

最佳答案

使用这个

import scala.reflect.ClassTag

def getTypedArg[T: ClassTag](any: Any): Option[T] = {
any match {
case t: T => Some(t)
case invalid =>
None
}
}

使用

scala> getTypedArg[Int](5)
res1: Option[Int] = Some(5)

scala> getTypedArg[Int]("str")
res2: Option[Int] = None

来源:Retrieve class-name from ClassTag


EDIT-1

按照@Aki的要求,通过这个 hack,它也可以与 TypeTag 一起使用

import reflect.runtime.universe._
import scala.reflect.ClassTag

def typeToClassTag[T: TypeTag]: ClassTag[T] = {
ClassTag[T]( typeTag[T].mirror.runtimeClass( typeTag[T].tpe ) )
}

def getTypedArg2[T: TypeTag](any: Any): Option[T] = {
implicit val c: ClassTag[T] = typeToClassTag[T]
any match {
case t: T => Some(t)
case invalid =>
None
}
}

引用:How to get ClassTag form TypeTag, or both at same time?

关于scala - 在 Scala 中,当 TypeTag 可用时如何转换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886227/

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