[英]How to print out the type of a list in Scala?
这是我正在尝试做的一个例子:
val ex = List[String]("a", "b", "c") typePrinter(ex) //prints out "List[String]"
这可能在Scala中吗? 标准.getClass
似乎在这里工作。 谢谢!
柴坦尼亚的方法是正确的。 也就是说,我的理解是在Scala 2.12中ClassTag
和TypeTag
优于Manifest
。 以下是使用TypeTag
执行此TypeTag
:
import scala.reflect.runtime.universe._
def getClassName[T : TypeTag](input: T) : String = {
typeOf[T].toString
}
val ex = List[String]("a", "b", "c")
println(getClassName(ex)) // prints "List[String]"
这样做的原因是类型擦除意味着在运行时,使用泛型参数String
声明List
的事实根本就不存在了。 为ClassTag
或TypeTag
添加上下文绑定意味着您为ClassTag[T]
或TypeTag[T]
引入了一个隐式参数,编译器会在遇到依赖项时为您生成该参数。 这些参数对可能会丢失的类型信息进行编码,并且可以在类似于typeOf
方法中使用,以提取比类实例本身更多的类型信息。
你可以像这样声明一个函数typeWriter
def typePrinter[T: Manifest](t: T): Manifest[T] = manifest[T]
然后输入
val ex = List[String]("a", "b", "c")
当您使用给定值作为输入调用typeWriter函数时,您将获得类型信息
typePrinter(ex)
输出为
res0: Manifest[List[String]] = scala.collection.immutable.List[java.lang.String]
此外,如果您处于scala repl模式,则可以使用':type'获取类型级别信息
scala> val ex = List[String]("a", "b", "c")
ex: List[String] = List(a, b, c)
scala> :type ex
List[String]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.