正如这篇文章(Is there something like python's interactive REPL mode, but for Java?)所示,我们可以将groovysh
用于Java REPL。
我有这个代码可以很好地编译javac
。
GroovyShell shell = new GroovyShell();
shell.evaluate("println \"My name is ${name}\"");
但是,当我尝试在groovysh
中运行此命令时,出现错误。我必须让\${name}
绕过错误。
这是为什么? Java和Groovy代码有什么不同的其他可能(角落)案例?
答案 0 :(得分:3)
Groovy中的双引号字符串文字是 GStrings ,它解释${...}
表达式并将其结果替换为字符串。鉴于Groovy代码
shell.evaluate("println \"My name is ${name}\"")
Groovy将尝试解析当前上下文中的name
变量,并在找不到合适的定义时抛出异常。
如果你想通过字面意思传递${...}
(所以它由GroovyShell
而不是当前的Groovy上下文解释)那么你需要转义美元符号或使用其中一个其他不受${...}
插值限制的Groovy字符串分隔符(单引号,三重单引号或斜杠):
shell.evaluate('println "My name is ${name}"')
shell.evaluate('''println "My dog's name is ${dogName}"''')
在单引号字符串中,您也不需要反斜杠双引号字符。