【发布时间】:2011-10-18 17:57:00
【问题描述】:
我看到 { } 用于闭包,然后我相信当 $ 放在大括号前面时,它只是在字符串中进行变量替换。我在参考文献中找不到关于 $ 如何工作的文档......不幸的是,很难搜索它,而且 Groovy String 文档在介绍这一点时缺乏。您能否将我指向文档和/或解释 Groovy 中的“$”运算符 - 它可以如何使用? Grails 是否将其扩展到 Groovy 之外?
【问题讨论】:
我看到 { } 用于闭包,然后我相信当 $ 放在大括号前面时,它只是在字符串中进行变量替换。我在参考文献中找不到关于 $ 如何工作的文档......不幸的是,很难搜索它,而且 Groovy String 文档在介绍这一点时缺乏。您能否将我指向文档和/或解释 Groovy 中的“$”运算符 - 它可以如何使用? Grails 是否将其扩展到 Groovy 之外?
【问题讨论】:
在 GString(groovy 字符串)中,任何有效的 Groovy 表达式都可以包含在 ${...} 中,包括方法调用等。
这在following page中有详细说明。
【讨论】:
Grails 没有将 $ 的使用扩展到 Groovy 之外。下面是$的两种实际用法
在 GString 中,您可以使用不带 {} 的 $ 来评估属性路径,例如
def date = new Date()
println "The time is $date.time"
如果要计算比属性路径更复杂的表达式,则必须使用 ${},例如
println "The time is ${new Date().getTime()}"
动态访问属性
def prop = "time"
new Date()."$prop"
动态调用方法
def prop = "toString"
new Date()."$prop"()
正如 cmets 中所指出的,这实际上只是字符串插值的一种特殊情况,因为以下也是有效的
new Date().'toString'()
【讨论】:
new Date().'toString'()?所以这只是第一个构建字符串的用例,然后用于访问方法/属性?
$ 真正有用的一个很好的例子
$ 不是 Groovy 中的运算符。在字符串替换中,它识别字符串中的变量——那里没有魔法。它是许多模板和编程语言中用于内联变量的常用格式。
这里列出了所有特殊的 Groovy 运算符:http://groovy-lang.org/operators.html
【讨论】: