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

时间:2016-07-10 01:30:36

标签: groovy discovery scriptengine groovyshell

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

我唯一知道的是函数名称,它需要一个参数,例如:

def runGroovyCode(name1){...}

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

希望我能清楚地描述这一点。它有点像常规代码,自我发现外部变量(数据)在其范围内。

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

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

没有进一步的文件。基本上,我的常规代码在黑盒子里运行。

1 个答案:

答案 0 :(得分:0)

您可以查看groovy.lang.Script课程。它有一个名为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]