Scala中的var_dump()

时间:2011-01-19 14:10:28

标签: scala

是否有任何方便的方法来转储Scala中指定对象的所有成员,
比如var_dump(), PHP function

3 个答案:

答案 0 :(得分:8)

如“How to Dump/Inspect Object or Variable in Java”中所述(是的,我知道,问题是关于Scala):

  

Scala(控制台)有一个非常有用的功能来检查或转储变量/对象值:

scala> def b = Map("name" -> "Yudha", "age" -> 27)
b: scala.collection.immutable.Map[java.lang.String,Any]

scala> b
res1: scala.collection.immutable.Map[java.lang.String,Any] = Map((name,Yudha), (age,27))

但是如果您想了解更多详情,可以试试REPL Scala Utils,以获得“Easier object inspection in the Scala REPL

  

所以我编写了一个用于Scala REPL的实用程序,它将打印出对象的所有“属性”

(注意:“我”在这里:Erik Engbrecht,还有on BitBucket

  

以下是一些示例用法:

scala> import replutils._
import replutils._

scala> case class Test(a: CharSequence, b: Int)
defined class Test

scala> val t = Test("hello", 1)
t: Test = Test(hello,1)

scala> printAttrValues(t)
hashCode: int = -229308731
b: int = 1
a: CharSequence (String) = hello
productArity: int = 2
getClass: Class = class line0$object$$iw$$iw$Test
  

这看起来相当反气候,但是花了好几个小时打字objName来看看那里有什么,并且盯着方法,这似乎是一个奇迹。
  此外,它的一个简洁特性是,如果返回的对象的类与方法上声明的类不同,它将打印声明的类和实际返回的类。

答案 1 :(得分:3)

您可能希望在commons-lang中查看ToStringBuilder,特别是ToStringBuilder.reflectionToString()

答案 2 :(得分:2)

在编译代码中,最好的方法通常只是将类型声明为案例类,然后使用生成的toString方法。

其他任何继承Product的东西都应该一样简单(目前只是元组)

如果做不到这一点,请编写自己的toString方法,这通常是微不足道的......