Как вывести список всех переменных связывания с помощью GroovyShell
Я очень новичок в Groovy. Как я могу перечислить все переменные, которые я передал в конструктор Binding?
Учитывая, что у меня есть следующее:
@Test
public void test() {
List<String> outputNames = Arrays.asList("returnValue", "ce");
String script = getScript();
Script compiledScript = compileScript(script);
CustomError ce = new CustomError("shit", Arrays.asList(new Long(1)));
Map<String, Object> inputObjects = new HashMap<String, Object>();
inputObjects.put("input", "Hovada");
inputObjects.put("error", ce);
Binding binding = new Binding(inputObjects);
compiledScript.setBinding(binding);
compiledScript.run();
for (String outputName : outputNames) {
System.out.format("outputName : %s = %s", outputName, binding.getVariable(outputName));
}
}
private Script compileScript(String script) {
GroovyShell groovyShell = new GroovyShell();
Script compiledScript = groovyShell.parse(script);
return compiledScript;
}
Как я могу перебрать все переменные (через hashMap) в groovy.script?
1 ответ
Решение
Script compiledScript
представляет скрипт, если вы посмотрите на его исходный код, вы увидите, что у него есть привязка свойства, а getter+setter, а в Binding есть переменная "variable". Итак, вы идете:
binding.variables.each{
println it.key
println it.value
}
За Map<String, String>
...
Вы также можете установить свойства следующим образом:
Binding binding = new Binding(inputObjects);
compiledScript.setBinding(binding);
compiledScript.setProperty("prop", "value");
compiledScript.run();
и он сохраняется в переменных Binding.