【问题标题】:What is the "?:" operator used for in Groovy?Groovy 中的“?:”运算符是做什么用的?
【发布时间】:2016-01-04 17:32:18
【问题描述】:

试图理解这行 Groovy 代码:

return strat?.descriptor?.displayName ?: "null"

?: 是 if/else 的简写吗?这是否意味着如果strat?.descriptor?.displayName 不为null,则打印它,否则打​​印null

我很困惑,因为 ?: 之间没有任何东西,就像我通常在 if/else 语句中所期望的那样。

【问题讨论】:

  • 您为什么不阅读 groovy 文档? docs.groovy-lang.org/next/html/documentation/…
  • @JBNizet,指向特定的运算符对我来说没有意义。 OP 可能从编程开始,甚至不知道猫王或三元运算符。直接 OP 到 groovy 操作符文档会更好。
  • 谢谢,之前不知道猫王算子

标签: groovy


【解决方案1】:

只是为了增加一些了解,“?:”运算符被称为二元运算符或通常称为 elvis 运算符。以下代码示例都产生相同的结果,其中 x 根据 Groovy Truth 计算为真

// These three code snippets mean the same thing. 
// If x is true according to groovy truth return x else return y
x ?: y

x ? x : y  // Standard ternary operator.

if (x) {
  return x
} else {
  return y
}

点击这里了解更多关于Elvis Operator的信息

【讨论】:

    【解决方案2】:

    是的,“?:”运算符将返回左边的值,如果它不为空。否则,将值返回到右侧。

    【讨论】:

    • 请注意,elvis 的工作原理非常合理。不仅是null,而且都是假的。例如"" ?: "empty" ===> empty
    • "是的,"?:" 运算符将返回左边的值,如果它不为空。" - 这是不正确的。有一些非空值,操作员会将值返回到右侧(空列表、空字符串、数字零、假等)。如果左边的值根据 Groovy 真值规则计算为“真”,则运算符返回左边的值。见groovy-lang.org/semantics.html#Groovy-Truth
    猜你喜欢
    • 2014-09-16
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2011-11-10
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多