Что означает вопросительный знак в GSP / Grails? - PullRequest
41 голосов
/ 03 января 2011

Я видел это на моих сгенерированных страницах GSP. Что означает ? ?

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

Ответы [ 4 ]

62 голосов
/ 03 января 2011

Это «оператор безопасной навигации», представляющий собой функцию Groovy, которая кратко избегает исключений нулевого указателя.См. http://docs.groovy -lang.org / latest / html / Documentation / index.html # _safe_navigation_operator

В этом случае, если phoneInstance равно нулю, то оно не пытаетсяполучить свойство name и вызвать NPE - он просто устанавливает значение тега поля на ноль.

4 голосов
/ 23 декабря 2013

Оператор ? допускает нулевые значения в Groovy (и, следовательно, GSP). Например, обычно в gsp,

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

Если priceDetails равно нулю, будет выброшено NullPointerException.

Если вместо этого мы используем оператор ? ...

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

теперь значение ${priceDetails?.amount} равно нулю вместо исключения исключения нулевого указателя.

1 голос
/ 02 ноября 2016

оператор безопасной навигации (?.) Возвращает ноль, если объект слева равен нулю, в противном случае он возвращает значение правого члена этого объекта. так что 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
}
1 голос
/ 19 сентября 2015

Это очень важная функция в Groovy.Если объект имеет значение null (т. Е. «PhoneInstance» имеет значение null), тогда он предоставляет значение «null».Эта функция называется «Оператор безопасной навигации».Просто, когда мы используем эту функцию, нет необходимости проверять объект ("phoneInstance") на ноль или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...