在Groovy中使用"$"

Ray*_*Ray 36 grails groovy

我看到{}用于闭包,然后我相信当一个$放在大括号前面时,它只是在一个字符串中进行变量替换.我找不到关于$如何在引用中工作的文档...很遗憾难以搜索它,并且Groovy String文档缺乏引入它.能否请您指出文档和/或解释Groovy中的"$"运算符 - 如何使用它?Grails是否将其扩展到Groovy之外?

Nic*_*zyk 45

在GString(groovy字符串)中,任何有效的Groovy表达式都可以包含在$ {...}中,包括方法调用等.

这将在下一页中详细说明.

  • 我从来不知道一个 GString 可以做这么多。 (2认同)
  • 我们中有些人可能会错过的一种预防措施,请使用双引号使它起作用,即“ Hello $ {varSam}”将不起作用,而“ Hello $ {varSam}”会起作用 (2认同)

Dón*_*nal 37

Grails不会将$的使用范围扩展到Groovy之外.这是$的两个实际用法

字符串插值

在GString中,您可以使用$ without {}来评估属性路径,例如

def date = new Date()
println "The time is $date.time"
Run Code Online (Sandbox Code Playgroud)

如果要评估比属性路径更复杂的表达式,则必须使用$ {},例如

println "The time is ${new Date().getTime()}"
Run Code Online (Sandbox Code Playgroud)

动态代码执行

动态访问属性

def prop = "time"
new Date()."$prop"
Run Code Online (Sandbox Code Playgroud)

动态调用方法

def prop = "toString"
new Date()."$prop"()
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,这实际上只是字符串插值的一个特例,因为以下内容也是有效的

new Date().'toString'()
Run Code Online (Sandbox Code Playgroud)


Ove*_*ous 11

$不是Groovy中的运算符.在字符串替换中,它标识字符串中的变量 - 那里没有魔法.它是许多模板和编程语言中用于内联变量的通用格式.

这里列出了所有特殊的Groovy运算符:http://groovy-lang.org/operators.html