El siguiente ejemplo usa la clase groovy.util.Eval para leer desde la entrada estandar el texto de descripción de una función
(6.1) | ||
(6.2) |
a continuación solicitar un entero para posteriormente construir una clausura a partir del texto de descripción de la función y evaluarla sobre el entero obtenido (véase la documentación de la clase groovy.util.Eval).
generaciondecodigos@nereida:~/Lgroovy/closures$ cat -n eval.groovy 1 #!/usr/bin/env groovy 2 3 input = new Scanner(System.in) 4 print "What's your function(x)? " 5 functiontxt = input.nextLine() 6 functiontxt = "{ x -> $functiontxt }" 7 8 print "x? " 9 x = input.nextLine().toInteger() 10 11 eo = new Eval() 12 df = eo.x(x, functiontxt) 13 14 println "f($x) = ${df(x)}"El manual de groovy.util.Eval dice sobre el método
x
:
public static Object x(Object x, String expression) throws CompilationFailedException evaluate expression and make x available inside the expression as 'x' Parameters: expression - the Groovy expression to evaluate Returns: the result of the expression Throws: CompilationFailedException - if expression is no proper Groovy
Ejecución:
generaciondecodigos@nereida:~/Lgroovy/closures$ ./eval.groovy What's your function(x)? x+2 x? 4 f(4) = 6 generaciondecodigos@nereida:~/Lgroovy/closures$ ./eval.groovy What's your function(x)? 2*x x? 5 f(5) = 10
Casiano Rodríguez León