簡體   English   中英

如何在Scala中打印出列表的類型?

[英]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中ClassTagTypeTag優於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的事實根本就不存在了。 ClassTagTypeTag添加上下文綁定意味着您為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM