2010-07-16 1 views
8

In python, posso usare eval() per eseguire il codice inserito dall'utente nel mio programma. C'è qualcosa di simile che posso fare in Groovy? Voglio avere una casella di testo UI SWING in cui l'utente inserisce un pezzo di codice che voglio eseguire?Equivalente di eval() in Groovy

Grazie, Hari

risposta

2

Prova questo (ma come al solito con eval in qualsiasi linguaggio di scripting essere attenti a exeution codice dannoso):

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

Sto cercando di eseguire un piccolo pezzo di codice nella mia grammatica personalizzata - sarà sicuramente verificare la presenza di codice dannoso . – Hari

9

Ci sono diversi modi di esecuzione Groovy (sia dall'interno Java e Groovy):

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

Il metodo più rapido invece (per gli script semplici), È probabilmente quello di utilizzare la classe Eval:

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

Il che permetterà di fare qualcosa di simile:

Eval.me('2 + 2') 

Vai a questa pagina da altri esempi:

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

+0

Grazie ci proverò! – Hari

4

Sì, è possibile valutare dinamicamente il codice in Groovy utilizzando Eval.x, Eval.xy, Eval.xyz o Eval.me. Vedere the API doc per ulteriori dettagli su questi metodi.

Ad esempio, si utilizza Eval.me in questo modo:

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

Inoltre, vedere this blog post for some eval examples

+2

Vuoi dire 'Eval.xy (a, b, 'println" $ x $ y "')' sicuramente? ;-) –

+0

Bella cattura, grazie. Modificato da Eval.x a Eval.me. Sull'uso di Eval.xy vs Eval.x - è una questione di preferenza. In questo caso puoi usare entrambi. Inoltre, puoi usare 'o "" ". –