Я использую GroovyShell
в качестве «средства оценки / выражения» внутри моей программы.Он принимает два ввода: (a) один или несколько сценариев инициализации (b) пользовательский сценарий.Оба затем объединяются во время выполнения как большой кусок скрипта (текста) и передаются в оболочку.
String initScripts = getFromDB()
String userScript = getFromUser()
def shell = new GroovyShell()
output = shell.evaluate(initScripts + userScript)
Приведенный выше код будет выполняться в цикле, где содержимое userScript
будет варьироваться.
Пока что initScripts
содержит только определения переменных (например, def $yyyy = new Date().format('yyyy')
), на которые можно ссылаться в userScript
(например, print "$yyyy 001"
).
Есть ли более эффективный подход для этого?(Например, повторное использование оболочки, как?) Потому что сейчас это очень медленно.
Редактировать: Groovy является обязательным.Пожалуйста, не рекомендуйте другой скрипт-движок.
Редактировать: Я думаю, может ли GroovyShell сделать это (псевдокод):
def shell = new GroovyShell()
shell.evaluate(initScripts)
for each userScript in DB {
shell.put(userScript )
def result = shell.evaluateThat()
println "Result is $result"
}
Возможно ли это?(В прошлый раз я гуглил, это было невозможно, но я надеюсь, что ошибаюсь)