2016-07-21 2 views
0

Может ли кто-нибудь сказать мне, почему я не могу использовать оператор Ternary в математической функции?CFML Тернарный оператор в математической функции

Вот пример:

<cfset test = 1> 
<cfdump var="#structKeyExists(Variables, 'test') ? 1 : 0 + 20#"> 

Я бы ожидать, что результатом этого будет 21, однако результат на самом деле выходит как 1.

Я обнаружил это на CF10, и когда я протестировал его на Railo, он вышел так же, так что мне интересно: это ошибка или есть причина Я не должен использовать Тернарный оператор в этом контексте?

+0

Попробуйте '' – Beginner

+0

Yup, это работает ... можете ли вы мне объяснить почему? –

+0

Bcoz '0 + 20' будет интерпретироваться как одно утверждение и часть условия else. – Beginner

ответ

4

Ложная инструкция вашего тернара не заканчивается на 0, она заканчивается в конце строки кода. Когда проверка будет ложной, тройка вернет оператор права :, в вашем примере 0 + 20.

Как рекомендовал новичок, использование скобок позволит вам закончить тернар раньше и продолжать манипулировать результатом. <cfdump var="#(structKeyExists(Variables, 'test') ? 1 : 0) + 20#"> даст вам 21 или 20, как указано.

+0

Hah! Понятно, когда это изложено, я думаю. ;) –