如何在groovy脚本中自我发现变量?

如何在groovy脚本中自我发现变量?,groovy,discovery,scriptengine,groovyshell,Groovy,Discovery,Scriptengine,Groovyshell,场景是,我可以编写groovy代码,由另一个应用程序中的脚本引擎执行 我只知道函数名,它有一个参数,例如: def runGroovyCode(name1){…} 有没有办法从groovy代码本身中找出groovy代码可以使用的其他变量或对象(传入的名称1除外) 希望我能描述清楚。这有点像groovy代码自我发现其范围内的外部变量(数据) 基本上,我的groovy代码需要更多的数据。我需要确认,如果name1是我仅有的数据,或者可能有更多的变量可用,但我不知道它们的名称,否则我无法访问它们 我需

场景是,我可以编写groovy代码,由另一个应用程序中的脚本引擎执行

我只知道函数名,它有一个参数,例如:

def runGroovyCode(name1){…}

有没有办法从groovy代码本身中找出groovy代码可以使用的其他变量或对象(传入的名称1除外)

希望我能描述清楚。这有点像groovy代码自我发现其范围内的外部变量(数据)

基本上,我的groovy代码需要更多的数据。我需要确认,如果name1是我仅有的数据,或者可能有更多的变量可用,但我不知道它们的名称,否则我无法访问它们

我需要找出在这个脚本引擎执行环境中,我的groovy代码将在其中运行的变量或对象

没有进一步的文件。所以基本上,我的groovy代码是在一个黑盒子中运行的。

您可以看看这个类。它有一个名为
binding
的属性,其中包含已传递给脚本的所有变量

这里有一个例子

class Main {
    def static SCRIPT = """
            // binding var contains all the bindings of the script
            println binding.variables
        """

    public static void main(String[] args) {
        def factory = new ScriptEngineManager();
        def engine = factory.getEngineByName("groovy");
        engine.eval(SCRIPT, new SimpleBindings([param1: 1, param2: 2]));
    }
}
输出:

[param1:1, param2:2, context:javax.script.SimpleScriptContext@2f7c2f4f, out:java.io.PrintWriter@6af93788]
你可以在课堂上看一看。它有一个名为
binding
的属性,其中包含已传递给脚本的所有变量

这里有一个例子

class Main {
    def static SCRIPT = """
            // binding var contains all the bindings of the script
            println binding.variables
        """

    public static void main(String[] args) {
        def factory = new ScriptEngineManager();
        def engine = factory.getEngineByName("groovy");
        engine.eval(SCRIPT, new SimpleBindings([param1: 1, param2: 2]));
    }
}
输出:

[param1:1, param2:2, context:javax.script.SimpleScriptContext@2f7c2f4f, out:java.io.PrintWriter@6af93788]