Groovy有一个功能断言,但我想要一个电源打印。例如,
def foo = 'banna5', monkey=7, x=70
println "foo=$foo, monkey=$monkey, x/2=${x/2}"
请参阅println行中重复的foo,monkey和expression ...我想要输入的是
pprint foo, monkey, x/2
这是我期望的输出(来自println或pprintln),
foo=banna5, monkey=7, x/2=35
有没有这样做的小曲?
答案 0 :(得分:0)
目前在Groovy中没有什么可以做你想要的......
问题在于打印出值时获取变量的名称。
powerrassert似乎是这样做的,通过对字节码的AST操作(参见line 947 of the class org.codehaus.groovy.classgen.AsmClassGenerator
)来装饰org.codehaus.groovy.runtime.powerassert
包内的几个类的assert方法。
因此,为了获得您需要的结果,必须添加类似的东西来以类似的方式操纵AST。
您可以向the project's JIRA添加新功能问题,但您永远不会知道......它可能会成为未来版本的Groovy
但就目前而言,我认为你已经坚持使用你的println,因为你已经在上面
了答案 1 :(得分:0)
这可能适用于您,也可能不适合您。它很可能只适用于脚本。
def pprint(def varClosure) {
s=varClosure()
print("\"$s\" = " + binding.variables[s])
}
test = 15
pprint{"test"}
我使用了一个闭包,因此它将传递当前上下文(以获取绑定)。您可以通过各种方式迭代闭包 - 例如,如果您传递pprint {[“test”,“anotherVar”]},您可以使用它而不是println:
s.each() { print("\"$it\" = ${binding.variables[s]},\t") }
println ""
这将非常接近你想要的结果。
如果你想用groovy类做这件事,那么绑定哈希就不存在了。有一个属性哈希,但它只访问对象属性(并非所有可用于闭包的变量 - 换句话说,它会错过方法和参数中定义的变量)。
也许闭包有一个可用的所有属性的哈希 - 这将是完美的。我会看得更晚。
还有一个你可能喜欢的对象上的dump()方法。