Я работаю на Парсер выражений и я хотел бы добавить условный оператор (?:
) Я изменился &&
а также ||
вести себя как объекты в javascript, используя этот код:
case '&&':
$stack->push($op1 && $op2 ? $op2 : ($op1 ? $op2 : $op1)); break;
case '||':
$stack->push($op1 ? $op1 : $op2); break;
так что я думал, что я просто заменю foo ? bar : baz
от foo && bar || baz
это возможно с помощью регулярных выражений? если операторы могут быть вложенными, каждый аргумент условного оператора может иметь один и тот же оператор.
foo && bar || baz
а также foo ? bar : baz
не эквивалентны.
Предположим, что оба foo
это значение считается истинным и bar
значение считается ложным. В таком случае, foo && bar
ложно, поэтому значение первого выражения baz
, Троичный оператор (?:
), с другой стороны, alwys возвращает второй аргумент, когда первый аргумент равен true, поэтому он вернет bar
,
Пытаться 1 && 0 || 2
а также 1 ? 0 : 2
, Первый 2, а второй 0.
Самый простой способ оценить троичный оператор — это один оператор, принимающий три операнда
Кстати, op1 && op2
можно было бы написать гораздо проще, как op1 ? op2 : op1
,
Других решений пока нет …