Как вывести список всех переменных связывания с GroovyShell - PullRequest
9 голосов
/ 14 сентября 2011

Я очень новичок в 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 Ответ

13 голосов
/ 15 сентября 2011

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переменные.

...