【问题标题】:What does question mark do when appended to domain property问号附加到域属性时有什么作用
【发布时间】:2013-01-05 18:29:41
【问题描述】:

我有以下:

if (params.query?.equals(g.message(code: "layouts.main.search"))) {
  params.query = ""
}

'?' 是什么意思?部分吗?

【问题讨论】:

  • 我很想知道投反对票的原因和是谁?
  • 我投了反对票。一个简单的谷歌搜索回答了这个问题,在 StackOverflow 中也有 duplicates
  • 我认为塞尔吉奥有点苛刻。谷歌我的确切问题标题,看到所有顶级结果都没有返回,同样对于 SO 上的建议问题/答案。那么问题就变成了——也许我可以想到更合适的词来进行谷歌搜索。对于刚接触 grails 的人来说,在执行搜索时想出合适的术语并不总是那么容易。对答案的 3 次投票表明人们正在登陆这里并发现它是一个合适的问题/答案。
  • 如果我用“grails 问号域属性”搜索,google 的第一个结果就是我上面指出的重复项。答案中的 3 个赞成票意味着答案就是您要寻找的答案,但在我看来,这并不意味着这是一个好问题。但这只是我的意见。

标签: grails


【解决方案1】:

它是一个安全导航操作符,它返回空值而不是抛出 NullPointerExceptions。

检查 Groovy 中可用的运算符

http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

【讨论】:

    【解决方案2】:

    来自 groovy.org

    安全导航操作员 (?.) 安全导航运算符用于避免 NullPointerException。通常,当您有一个对象的引用时,您可能需要在访问该对象的方法或属性之前验证它不为空。为避免这种情况,安全导航运算符将简单地返回 null 而不是抛出异常,如下所示:

    def user = User.find( "admin" )           //this might be null if 'admin' does not exist
    def streetName = user?.address?.street    //streetName will be null if user or user.address is null - no NPE thrown
    

    【讨论】:

      【解决方案3】:

      这里是 ?运营商:

      http://groovy.codehaus.org/Operators#Operators-SafeNavigationOperator

      在你的情况下?运算符保护空对象上的方法调用“等于”,例如在参数列表中找不到查询参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 1970-01-01
        • 2013-08-17
        • 2014-01-15
        相关资源
        最近更新 更多