Как избежать вычисления GString

#groovy #gstring

#groovy #gstring

Вопрос:

Я работаю над расширением устаревшей системы скриптов с использованием groovy. Исходные скрипты «похожи на Java», поэтому они в основном анализируются как groovy script с небольшой предварительной обработкой.

Я использую invokeMethod() и missingMethod () для передачи устаревшего кода, что позволяет мне использовать замыкания и другие функции groovy для улучшения скриптов. Однако исходный скрипт использует строки типа «$foo» для ссылки на переменные. Когда устаревший метод перехватывается missingMethod(), мне нужно, чтобы он не оценивал эту строку как GString, а просто выводил ее дословно. Возможно ли это каким-либо образом?

Комментарии:

1. Я не уверен, правильно ли я понял это, но почему бы вам не экранировать GStrings на этапе предварительной обработки?

2. То, что вы предлагаете, например, экранирование ‘$’ s при предварительной обработке, — это то, с чем я закончил до сих пор.

Ответ №1:

есть два способа избежать $ foo:

  1. экранируйте ‘$’ как ‘ $’
  2. используйте ‘ вместо » в качестве разделителя строки

пример:

  def test = "bad"
 def s0 = "$test"
 def s1 = "$test"
 assert s1 != s0
 def s2 = '$test'
 assert s2 == s1
 println s0
 println s1
 println s2
  

Итак, я думаю, вам нужно использовать свой препроцессор, чтобы избежать ваших строк