#groovy #gstring
#groovy #gstring
Вопрос:
Я работаю над расширением устаревшей системы скриптов с использованием groovy. Исходные скрипты «похожи на Java», поэтому они в основном анализируются как groovy script с небольшой предварительной обработкой.
Я использую invokeMethod() и missingMethod () для передачи устаревшего кода, что позволяет мне использовать замыкания и другие функции groovy для улучшения скриптов. Однако исходный скрипт использует строки типа «$foo» для ссылки на переменные. Когда устаревший метод перехватывается missingMethod(), мне нужно, чтобы он не оценивал эту строку как GString, а просто выводил ее дословно. Возможно ли это каким-либо образом?
Комментарии:
1. Я не уверен, правильно ли я понял это, но почему бы вам не экранировать GStrings на этапе предварительной обработки?
2. То, что вы предлагаете, например, экранирование ‘$’ s при предварительной обработке, — это то, с чем я закончил до сих пор.
Ответ №1:
есть два способа избежать $ foo:
- экранируйте ‘$’ как ‘ $’
- используйте ‘ вместо » в качестве разделителя строки
пример:
def test = "bad"
def s0 = "$test"
def s1 = "$test"
assert s1 != s0
def s2 = '$test'
assert s2 == s1
println s0
println s1
println s2
Итак, я думаю, вам нужно использовать свой препроцессор, чтобы избежать ваших строк