2010-07-16 24 views
8

En python, puedo usar eval() para ejecutar el código ingresado por el usuario en mi programa. ¿Hay algo similar que pueda hacer en Groovy? Quiero tener un cuadro de texto SWING UI donde el usuario ingresa un fragmento de código que quiero ejecutar?Equivalente a eval() en Groovy

Gracias, Hari

Respuesta

2

Prueba esto (pero como de costumbre con eval en cualquier lenguaje de script tener cuidado con exeution código malicioso):

evaluate("print new Date()") 
+0

Estoy intentando funcionar con un pequeño trozo de código en mi gramática personalizada - sin duda comprobar si hay código malicioso . – Hari

9

Existen múltiples formas de dirigir maravilloso (tanto desde el interior Java y Groovy):

http://groovy.codehaus.org/Embedding+Groovy

Sin embargo, el método más rápido (para secuencias de comandos simples), Es probable que utilice la clase Eval:

http://groovy.codehaus.org/api/groovy/util/Eval.html

Qué le permiten hacer algo como:

Eval.me('2 + 2') 

ver esta página del más ejemplos:

http://mrhaki.blogspot.com/2009/11/groovy-goodness-simple-evaluation-of.html

+0

¡Gracias lo intentaré! – Hari

4

Sí, es posible evaluar dinámicamente el código en Groovy usando Eval.x, Eval.xy, Eval.xyz o Eval.me. Consulte the API doc para obtener más detalles sobre estos métodos.

Por ejemplo, se utiliza Eval.me así:

def a = "hello" 
def b = "world" 
Eval.me(""" println "$a $b" """) 
--> hello world 

Además, vea this blog post for some eval examples

+2

¿Quiere decir 'Eval.xy (a, b, 'println' $ x $ y" ') 'seguramente? ;-) –

+0

Buena captura, gracias. Cambiado de Eval.x a Eval.me. Sobre el uso de Eval.xy vs Eval.x - es una cuestión de preferencia. En este caso, puede usar cualquiera de ellos. Además, puedes usar 'o "" ". –