如何避免评估GString

Jo-*_*olt 3 groovy gstring

我正在使用groovy扩展传统脚本系统。源脚本是“类似于Java的”,因此它几乎可以解析为具有一些预处理的常规脚本。

我正在使用invokeMethod()和missingMethod()来传递旧代码,从而使我能够使用闭包和其他常规功能来增强脚本。但是,原始脚本使用“ $ foo”类型的字符串来引用变量。当遗留方法被missingMethod()捕获时,我需要它不将该字符串评估为GString,而只是逐字输出。这有可能吗?

rdm*_*ler 5

有两种逃避$ 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
Run Code Online (Sandbox Code Playgroud)

所以我想你必须使用预处理器才能转义字符串