2014-01-30 74 views
0

在斯卡拉REPL如果我評價:打印類型和內容來安慰

val lines : String = ("a1 , test1 , test2 , a2 , test3 , test4") 
    lines.split(",").grouped(3).toList 

我收到這對節省:

//> res0: List[Array[String]] = List(Array("a1 ", " test1 ", " test2 "), Array(" 
                //| a2 ", " test3 ", " test4")) 

我想能夠打印此信息發送到控制檯,res0的值

因此,像printTypeInformation(lines.split(",").grouped(3).toList)這樣的東西將打印與上面的res0相同的值。我想我可以通過迭代List打印值和類型信息來實現上述類型。但有沒有更通用的方法,以便這些信息可以打印爲任何類型?

回答

1

由於pointed out by @Jatin ,你可以用艙單做到這一點:

def manOf[T: Manifest](t: T): Manifest[T] = manifest[T] 
val lines : String = ("a1 , test1 , test2 , a2 , test3 , test4") 
val xs = lines.split(",").grouped(3).toList 
println(manOf(xs)) 
// scala.collection.immutable.List[Array[java.lang.String]] 
+0

也可以使用清單訪問類型信息的值,因此在這種情況下打印數組的值? –

+0

@Adrian在一般情況下REPL使用普通的.toString方法(你可以用'class Foo {override def toString =「I'm bar」}; new Foo')來檢查它,所以'manOf(xs)+「=」+ xs.toString'非常接近你想要存檔的內容,儘管REPL對於數組有特殊的情況,我猜想其他一些類。 –

1

答案是接近從OM-NOM-NOM的一個,但斯卡拉2.10我想更好地使用類型標籤:

scala> "a1 , test1 , test2 , a2 , test3 , test4" 
res3: String = a1 , test1 , test2 , a2 , test3 , test4 

scala> res3.split(",").grouped(3).toList 
res4: List[Array[String]] = List(Array("a1 ", " test1 ", " test2 "), Array(" a2 ", " test3 ", " test4")) 

scala> def typped[T: TypeTag](obj: T) = typeOf[T] 
typped: [T](obj: T)(implicit evidence$1: reflect.runtime.universe.TypeTag[T])reflect.runtime.universe.Type 

scala> typped(res4) 
res5: reflect.runtime.universe.Type = scala.List[scala.Array[String]]