Groovy Power Print

Groovy Power Print,groovy,Groovy,Groovy有一个power断言,但我想要一个power打印。比如说, def foo = 'banna5', monkey=7, x=70 println "foo=$foo, monkey=$monkey, x/2=${x/2}" 查看println行中重复的foo、monkey和表达式。。。我要打的是这个 pprint foo, monkey, x/2 这是println或pprintln的输出 foo=banna5, monkey=7, x/2=35 有没有一首小曲已经做到了这一点

Groovy有一个power断言,但我想要一个power打印。比如说,

def foo = 'banna5', monkey=7, x=70
println "foo=$foo, monkey=$monkey, x/2=${x/2}"
查看println行中重复的foo、monkey和表达式。。。我要打的是这个

pprint foo, monkey, x/2
这是println或pprintln的输出

foo=banna5, monkey=7, x/2=35

有没有一首小曲已经做到了这一点?

在Groovy中,没有任何东西可以满足您当前的需求

问题是在打印值时获取变量的名称

powerrassert似乎是通过字节码的AST操作来完成的。请参见,在org.codehaus.groovy.runtime.powerassert包中用几个类来修饰assert方法

因此,为了获得所需的结果,必须添加类似的内容,以类似的方式操作AST

您可以在Groovy的未来版本中添加一个新的特性问题,但您永远不知道……它可能会成为Groovy的未来版本


但是现在,我认为你仍然坚持你的println,就像上面所说的那样

这可能对你有效,也可能对你无效。它很可能只在脚本中工作

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方法,您可能会喜欢。

为什么是的,我确实使用println进行调试。你怎么知道的?我真正想要的是[布雷特·维克托·塔克在原则上发明]。本质上是透明和即时反馈。