【问题标题】:Safe navigation operator in GroovyGroovy 中的安全导航运算符
【发布时间】:2012-03-13 15:15:26
【问题描述】:

我使用安全导航运算符来避免这样的 NPE

myInstance?.field1
myInstance?.field2
myInstance?.field3

为了在我写的for循环中转换上面的代码

<g:each var="i" in="${ (1..<4 }">
    myInstance['field'+i]
</g:each>

当我以 hashmap 格式检索值时,如何在上述代码中使用安全导航运算符?
我查看了文档here,但没有类似的示例。

【问题讨论】:

    标签: grails groovy operators conditional-operator


    【解决方案1】:

    我会使用这种语法:

    myInstance?."field$i"
    

    【讨论】:

    • 这行得通,但是否有关于何时使用单引号和何时使用双引号的指南?我可以互换使用它们,但在这种情况下,只有双引号有效!
    • 双引号之所以有效,是因为它与嵌入的表达式 ($i) 一起生成了一个 GString,并且通过这种方式动态获取属性或调用方法需要特殊处理。
    【解决方案2】:

    你可以这样做:

    <g:each var="i" in="${ (1..<4 }">
        ${myInstance?."field$i"}
    </g:each>
    

    或者,可能更好(并且在您的代码中更整洁)是 make this a tag 并像上面在纯 groovy 标记中那样做。

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 2011-05-05
      • 2016-04-08
      • 1970-01-01
      • 2017-05-27
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多