【问题标题】:Issues when using Groovysh as Java REPL将 Groovysh 用作 Java REPL 时的问题
【发布时间】:2015-03-12 16:18:57
【问题描述】:

正如这篇文章 (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 代码有哪些不同的其他可能(角落)情况?

【问题讨论】:

标签: java groovy


【解决方案1】:

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}"''')

在单引号字符串中,双引号字符也不需要反斜杠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多