#coldfusion #ternary-operator #cfml #coldfusion-2016
#coldfusion #троичный оператор #cfml #coldfusion-2016
Вопрос:
q.rel
может быть 1, 2 или 3
for (q in qry) {
pCode = (q.rel NEQ 3 ? q.rel
: pCode GTE 3 ? pCode : 3);
...
}
Если есть куча q.rel равно 3 в строке, pCode
предполагается увеличение, но оно показывает только 3.
Обратите внимание, что нигде больше нет начальной настройки pCode
. Это завершено.
Ответ №1:
Вот как работает постфиксное увеличение. Я продемонстрирую порядок операций с ассемблером и использую регистры, чтобы избежать путаницы с временной переменной (которая на самом деле не существует).
Эти инструкции (постфиксный инкремент):
x = 0;
x = x ;
// x is still 0
перевести в:
mov eax, 0 ; x = 0
mov ebx, eax ; x assignment on the right-hand side
mov eax, ebx ; x = x
inc ebx ; x
«x» было увеличено после выполнения присваивания, и, следовательно, значение никогда не менялось.
Теперь эти инструкции (приращение префикса):
x = 0;
x = x;
// x is now 1
перевести в:
mov eax, 0 ; x = 0
mov ebx, eax ; x assignment on the right-hand side
inc ebx ; x
mov eax, ebx ; x = x
«x» было увеличено до выполнения присваивания, и, следовательно, значение изменилось.
Это в значительной степени то, как каждый язык программирования обрабатывает это. Это вообще не связано с троичным оператором.
Ответ №2:
Когда q.rel равно 3, все это может быть уменьшено до:
pCode = pCode ;
Вопрос: Итак, чему это равно?
A. Это ничего не делает. pCode
никогда не увеличивается
pCode = pCode;
увеличивает. Или более полно:
for (q in qry) {
pCode = (q.rel NEQ 3 ? q.rel
: pCode GTE 3 ? pCode : 3);
...
}