场景是,我可以编写将由另一个应用程序中的脚本引擎执行的groovy代码。
我唯一知道的是函数名称,它需要一个参数,例如:
def runGroovyCode(name1){...}
有没有办法从groovy代码本身中找出groovy代码可以使用的其他变量或对象(传入的name1除外)?
希望我能清楚地描述这一点。它有点像常规代码,自我发现外部变量(数据)在其范围内。 基本上,我需要更多数据用于我的groovy代码。我需要确认,如果name1是我拥有的唯一数据,或者可能有更多变量,但我不知道他们的名字是什么,否则我无法访问它们。我需要找出这个脚本引擎执行环境中可用的变量或对象,我的groovy代码将在其中运行。
没有进一步的文件。基本上,我的常规代码在黑盒子里运行。
答案 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]