[英]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.