Я использую GroovyShell
как «средство оценки выражений / механизм» внутри моей программы. Он принимает два входа: (а) один или несколько сценариев инициализации (б) пользовательский сценарий. Затем оба они объединяются во время выполнения в виде большого фрагмента скрипта (текста) и передаются в оболочку.
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"
}
Возможно ли это? (В прошлый раз я погуглил, это невозможно, но я надеюсь, что m неверно)