La clase Eval

El siguiente ejemplo usa la clase groovy.util.Eval para leer desde la entrada estandar el texto de descripción de una función

$\displaystyle f: \mathcal{Z}$ $\displaystyle \rightarrow{} \mathcal{Z}$ (6.1)
$\displaystyle x$ $\displaystyle \rightarrow{} f(x)$ (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
2010-04-30