#templates #groovy #playframework
#шаблоны #groovy #работа с фреймами
Вопрос:
Почему следующий код всегда выдает ‘yes’ (в HTML), даже когда sel
имеет другое значение, отличное от ‘audio’? (Я зарегистрировал значения sel
и подтвердил разные значения.)
Это мой первый день в игре. Итак, возможно, я делаю что-то действительно глупое.
${sel='audio'?'yes':'no'}
Ответ №1:
Я не очень хорошо знаком с шаблонами Groovy, но я думаю, что это должно быть так:
${sel=='audio'?'yes':'no'}
Ваш код:
${sel='audio'?'yes':'no'}
означает; если ‘audio’ (строка, которая не равна null, всегда будет «true»), то sel = ‘yes’, в противном случае ‘no’, так что это никогда не будет ‘no’.
Комментарии:
1. не соответствует ссылке Groovy groovy.codehaus.org /…
2. правильно, вам нужно == для того, чтобы троичный вычислял обе части выражения; в противном случае всегда будет возвращаться левая часть троичного.
3. @roshan Я думаю, вы неправильно истолковываете groovy пример на связанной странице. Это проверка логического значения и сохранение либо ‘male’, либо ‘female’ в новой переменной. В вашем примере вы хотите сравнить переменную со строкой, и результат будет выведен. Поэтому вам нужно
==
для сравнения.4. Я думаю, Джонас прав. Насколько я понимаю, оператор Elvis вычисляет выражение и возвращает что-то, если оно равно false или null, и что-то другое в противном случае. В этом случае вычисляемое выражение является присваиванием, которое, в свою очередь, принимает присваиваемое значение (в данном случае ‘audio’, которое не является false или null). Вы должны использовать оператор == (‘equals’).
5. Спасибо, ребята! Да, это было ==. Изначально, по интуиции, у меня было ==, и это не сработало (возможно, у меня была какая-то другая ошибка), а затем я допустил «ошибку», проверив ссылку Groovy, и неправильно интерпретировал их пример 🙂
Ответ №2:
Возможно, вы захотите взглянуть на расширение YesNo:http://www.playframework.org/documentation/1.2.1/javaextensions#yesNo