2010-07-16 3 views
8

В python я могу использовать eval() для выполнения введенного пользователем кода в моей программе. Есть ли что-нибудь подобное в Groovy? Я хочу иметь текстовое поле SWING UI, где пользователь вводит фрагмент кода, который я хочу выполнить?Эквивалент eval() в Groovy

Спасибо, Хари

ответ

2

Попробуйте это (но, как обычно, с Eval на любом языке сценариев быть осторожным вредоносным кодом exeution):

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

Я пытаюсь запустить небольшой кусок кода в моей пользовательской грамматики - обязательно проверить на наличие вредоносного кода , – Hari

9

Есть несколько способов запуска Groovy (как изнутри Java и Groovy):

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

Самый быстрый метод, однако (для простых сценариев), Вероятно, использовать класс Eval:

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

Который позволит вам сделать что-то вроде:

Eval.me('2 + 2') 

Смотрите эту страницу из нескольких примеров:

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

+0

Спасибо, попробуй! – Hari

4

Да, можно динамически оценивать код в Groovy с помощью Eval.x, Eval.xy, Eval.xyz или Eval.me. См. the API doc для получения более подробной информации об этих методах.

Например, вы используете Eval.me так:

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

Также см this blog post for some eval examples

+2

Вы имеете в виду 'Eval.xy (a, b, 'println" $ x $ y "')' уверенно? ;-) –

+0

Хороший улов, спасибо. Изменено с Eval.x до Eval.me. Об использовании Eval.xy vs Eval.x - это вопрос предпочтения. В этом случае вы можете использовать любой из них. Кроме того, вы можете использовать «или» «». –

Смежные вопросы