2010-07-16 5 views
8

In Python kann ich eval() verwenden, um Benutzer eingegebenen Code in meinem Programm auszuführen. Kann ich etwas Ähnliches in Groovy machen? Ich möchte ein SWING-UI-Textfeld, in dem der Benutzer einen Codeabschnitt eingibt, den ich ausführen möchte?Equivalent von eval() in Groovy

Danke, Hari

Antwort

2

Versuchen Sie, diese (aber wie bei eval in jeder Skriptsprache zu bösartigem Code exeution vorsichtig sein üblich):

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

Ich versuche, ein kleines Stück Code in meiner benutzerdefinierten Grammatik zu laufen - wird auf jeden Fall für bösartigen Code überprüfen . – Hari

9

Es gibt mehrere Möglichkeiten, Groovy läuft (von innen Java und Groovy):

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

Die schnellste Methode aber (für einfache Skripte), Ist wahrscheinlich die Eval-Klasse zu verwenden:

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

, die Sie tun so etwas wie lassen würde:

Eval.me('2 + 2') 

Sehen Sie diese Seite von mehr Beispiele:

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

+0

Danke werde das versuchen! – Hari

4

Ja, es ist möglich, Code in Groovy dynamisch auszuwerten, indem Sie Eval.x, Eval.xy, Eval.xyz oder Eval.me verwenden. Weitere Informationen zu diesen Methoden finden Sie unter the API doc.

Zum Beispiel Sie Eval.me wie folgt verwenden:

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

Auch sehen this blog post for some eval examples

+2

Sie meinen 'Eval.xy (a, b, 'println' $ x $ y '')' sicherlich? ;-) –

+0

Netter Fang, danke. Von Eval.x zu Eval.me geändert. Auf die Verwendung von Eval.xy vs Eval.x - es ist eine Frage der Präferenz. In diesem Fall können Sie beide verwenden. Sie können auch 'oder' "" verwenden. –