Scala 打印类型参数';s型
鉴于: 我想替换定义以打印出Scala 打印类型参数';s型,scala,Scala,鉴于: 我想替换定义以打印出A的类型 是否有以下替代方案: scala> def f[A]: Unit = ??? f: [A]=> Unit 这实际上不是打印出类型,而是打印出类 scala> def f[A](implicit manifest: scala.reflect.Manifest[A]) = manifest.toString f: [A](implicit manifest: scala.reflect.Manifest[A])String scala&g
A
的类型
是否有以下替代方案:
scala> def f[A]: Unit = ???
f: [A]=> Unit
这实际上不是打印出类型,而是打印出类
scala> def f[A](implicit manifest: scala.reflect.Manifest[A]) = manifest.toString
f: [A](implicit manifest: scala.reflect.Manifest[A])String
scala> f[String]
res10: String = java.lang.String
使用TypeTag
获取类型信息。但是,没有比这更简单的方法了。因为这是在运行时发生的,所以需要TypeTag
来保存类型信息
scala> f[List[Int]]
res17: String = scala.collection.immutable.List[Int]
我们可以使用上下文绑定语法使其看起来更简洁:
scala> import scala.reflect.runtime.universe.{TypeTag, typeOf}
import scala.reflect.runtime.universe.{TypeTag, typeOf}
scala> def f[A](implicit tt: TypeTag[A]): Unit = println(typeOf[A])
f: [A](implicit tt: reflect.runtime.universe.TypeTag[A])Unit
scala> f[List[Int]]
scala.List[Int]
你为什么需要另一种选择?您提供的实现符合您的要求。我只是想知道是否可以避免使用
清单
——如果有更简洁的方法,您需要一个宏来完成这项工作,而无需清单。如果你想学习,这将是一个很好的练习,但它肯定不会产生更简洁的结果。
def f[A : TypeTag]: Unit = println(typeOf[A])