如何枚举groovy脚本中所有定义的变量

如何枚举groovy脚本中所有定义的变量,groovy,scripting,Groovy,Scripting,我有一个groovy脚本,在运行时上下文中包含未知数量的变量,如何找到它们并打印每个变量的名称和值?如果您使用一个简单的脚本(不使用“def”关键字),那么您定义的变量将存储在绑定中,您可以这样获得它们: foo = "abc" bar = "def" if (true) { baz = "ghi" this.binding.variables.each {k,v -> println "$k = $v"} } 印刷品: foo = abc baz =

我有一个groovy脚本,在运行时上下文中包含未知数量的变量,如何找到它们并打印每个变量的名称和值?

如果您使用一个简单的脚本(不使用“def”关键字),那么您定义的变量将存储在绑定中,您可以这样获得它们:

foo = "abc"
bar = "def"

if (true) {
    baz = "ghi"
    this.binding.variables.each {k,v -> println "$k = $v"}
}
印刷品:

    foo = abc 
    baz = ghi 
    args = {} 
    bar = def

我不知道有什么简单的方法可以枚举用“def”关键字定义的变量,但我会饶有兴趣地关注这个问题,看看是否有其他人知道如何枚举。

实际上,Ted的答案也适用于“def”定义的变量

def foo = "abc" def bar = "def" if (true) { baz = "ghi" this.binding.variables.each {k,v -> println "$k = $v"} } def foo=“abc” def bar=“def” 如果(真){ baz=“ghi” this.binding.variables.each{k,v->println“$k=$v”} } 屈服

baz = ghi __ = [null, null, null] foo = abc _ = null bar = def baz=ghi __=[零,零,零] foo=abc _=null bar=def
我不确定这些变量意味着什么,但我相信您可以解决它们。

Groovy对象包含方法-
dump()

例如:

class MyClass {
    def foo = "abc"
    def bar = "def"
}


println(new MyClass().dump())

stdout:

.
是最后一个计算表达式的结果,至少在groovysh(以及Python的REPL和其他许多表达式)中是如此。我不太清楚
\uuuuu
,虽然我可以看到它是其他类型的评估历史。所以,这对我不适用<代码>def foo=“asdgasgf”;this.binding.variables.each{k,v->println“$k$v”}仅打印出
args[]
this.binding.variables.each{k,v->println“${v.class}$k=$v”}
如果您也想查看类型的话
class MyClass {
    def foo = "abc"
    def bar = "def"
}


println(new MyClass().dump())