【问题标题】:Using "$" in Groovy在 Groovy 中使用“$”
【发布时间】:2011-10-18 17:57:00
【问题描述】:

我看到 { } 用于闭包,然后我相信当 $ 放在大括号前面时,它只是在字符串中进行变量替换。我在参考文献中找不到关于 $ 如何工作的文档......不幸的是,很难搜索它,而且 Groovy String 文档在介绍这一点时缺乏。您能否将我指向文档和/或解释 Groovy 中的“$”运算符 - 它可以如何使用? Grails 是否将其扩展到 Groovy 之外?

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

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

    这在following page中有详细说明。

    【讨论】:

    • 感谢您指出它位于 GString 部分。 String 部分在其中一个示例中使用了 ${},并没有介绍它。
    • 我从来不知道一个 GString 可以做这么多。
    • 我们中的一些人可能会错过的一项预防措施,请使用双引号使其起作用,即“Hello ${varSam}”不起作用,但“Hello ${varSam}”
    【解决方案2】:

    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'()?所以这只是第一个构建字符串的用例,然后用于访问方法/属性?
    • @tim - 你说得对,我想我真正展示的是字符串插值的两种实际用法,而不是 $ 的两种用法。我会尽量让这个更清楚
    • +1 from me :-) 抱歉,我有点迂腐,因为这是 $ 真正有用的一个很好的例子
    • 酷 - 感谢展示动态访问属性和动态调用方法的示例
    • 我也想将您的答案标记为答案,或者提出分数,但我不允许这样做。感谢 grails 的说明和示例。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      在管道中处理 Jenkins 文件

      #!/usr/bin/env groovy
      node{
                stage ('print'){
                   def DestPath="D\$\\"
                   println("DestPath:${DestPath}")
                }
      }
      

      【讨论】:

      • 不起作用。詹金斯抱怨“def”。
      猜你喜欢
      • 2014-07-16
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多