2011-09-14 27 views
9

Soy muy nuevo en Groovy. ¿Cómo puedo enumerar todas las variables que pasé al constructor de enlace?Cómo enumerar todas las variables de enlace con GroovyShell

Teniendo en cuenta que he siguiente:

@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; 
} 

Como puedo iterar sobre todas las variables (por encima del Hashmap) en groovy.script?

Respuesta

12

Script compiledScript representa la secuencia de comandos, si nos fijamos en su código fuente, verá que tiene enlace de propiedad y getter + setter y Binding tiene una variable "variables". Así que ir:

binding.variables.each{ 
    println it.key 
    println it.value 
} 

Para Map<String, String> ...

también puede establecer las propiedades de la siguiente manera:

Binding binding = new Binding(inputObjects); 
compiledScript.setBinding(binding); 
compiledScript.setProperty("prop", "value"); 
compiledScript.run(); 

y se almacena en las variables de encuadernación.

Cuestiones relacionadas