2014-01-30 71 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]]