如何用&&和||替换条件运算符?

How to replace conditional operator by && and ||?

我正在研究 Expression parser 我想添加条件运算符 (?:) 我已经更改了 &&|| 以像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 || bazfoo ? bar : baz 不等价。

假设 foo 是一个被认为是真的值,而 bar 是一个被认为是假的值。在这种情况下,foo && bar 为假,因此第一个表达式的值为 baz。另一方面,三元运算符 (?:) 在第一个参数为真时总是 return 第二个参数,因此它将 return bar.

试试 1 && 0 || 21 ? 0 : 2。第一个是 2,第二个是 0。

评估三元运算符的最简单方法是作为一个带有三个操作数的运算符


顺便说一下,op1 && op2 可以更简单地写成 op1 ? op2 : op1