GSP/Grails 中的问号是什么意思?

发布于 2024-10-10 05:30:27 字数 143 浏览 4 评论 0原文

我在生成的 GSP 页面中看到了这一点。 是什么意思?

<g:textField name="name" value="${phoneInstance?.name}" />

I saw this in my generated GSP pages. What does the ? mean?

<g:textField name="name" value="${phoneInstance?.name}" />

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

薆情海 2024-10-17 05:30:27

它就是“安全导航操作符”,它是 Groovy 的一项功能,可以简洁地避免空指针异常。请参阅http://docs.groovy-lang.org/latest/html/documentation/index .html#_safe_navigation_operator

在这种情况下,如果 phoneInstance 为 null,那么它不会尝试获取 name 属性并导致 NPE - 它只是设置字段标记的值为空。

It's the "Safe Navigation Operator", which is a Groovy feature that concisely avoids null pointer exceptions. See http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

In this case, if phoneInstance is null, then it doesn't try to get the name property and cause a NPE - it just sets the value of the field tag to null.

夏夜暖风 2024-10-17 05:30:27

? 运算符在 Groovy 中允许空值(因此,GSP)。例如,通常在 gsp 中,

<g:field name="amount" value="${priceDetails.amount}" />

如果 priceDetails 为 null,则会抛出 NullPointerException

如果我们改用 ? 运算符...

<g:field name="amount" value="${priceDetails?.amount}" /> 

现在 ${priceDetails?.amount} 的值为 null,而不是抛出空指针异常。

The ? operator allows null values in Groovy (and thusly, GSP). For example, normally in gsp,

<g:field name="amount" value="${priceDetails.amount}" />

If priceDetails is null, this will throw a NullPointerException.

If we use the ? operator instead ...

<g:field name="amount" value="${priceDetails?.amount}" /> 

now the value of ${priceDetails?.amount} is null, instead of throwing a null pointer exception.

月棠 2024-10-17 05:30:27

这是 Groovy 中非常重要的功能。如果该对象为空(即
“phoneInstance”为 null),然后它提供“null”值。此功能
被称为“安全导航运营商”。简单来说,当我们使用这个功能时,不需要检查对象(“phoneInstance”)是否为空。

This is very important feature in Groovy. If the object is null (ie,
"phoneInstance" is null) then it's provide "null" value. This feature
is called "Safe Navigation Operator". Simply when we use this feature , No need of checking the object("phoneInstance") is null or not.

吐个泡泡 2024-10-17 05:30:27

如果左侧的对象为 null,则安全导航运算符 (?.) 返回 null,否则返回该对象右侧成员的值。所以 phoneInstance?.name 只是 phoneInstance == null 的简写? null :phoneInstance.name

例如:

a = x?.y

只是简写:

a = (x == null ? null : x.y)

这是简写:

if(x == null){
    a = null
} else {
    a = x.y
}

the safe navigation operator (?.) returns null if the object on the left is null, otherwise it returns the value of the right member of that object. so phoneInstance?.name is just shorthandn for phoneInstance == null ? null : phoneInstance.name

for example:

a = x?.y

is just shorthand for:

a = (x == null ? null : x.y)

which is shorthand for:

if(x == null){
    a = null
} else {
    a = x.y
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文