如何用&&和||替换条件运算符?
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 || baz
和 foo ? bar : baz
不等价。
假设 foo
是一个被认为是真的值,而 bar
是一个被认为是假的值。在这种情况下,foo && bar
为假,因此第一个表达式的值为 baz
。另一方面,三元运算符 (?:
) 在第一个参数为真时总是 return 第二个参数,因此它将 return bar
.
试试 1 && 0 || 2
和 1 ? 0 : 2
。第一个是 2,第二个是 0。
评估三元运算符的最简单方法是作为一个带有三个操作数的运算符
顺便说一下,op1 && op2
可以更简单地写成 op1 ? op2 : op1
。
我正在研究 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 || baz
和 foo ? bar : baz
不等价。
假设 foo
是一个被认为是真的值,而 bar
是一个被认为是假的值。在这种情况下,foo && bar
为假,因此第一个表达式的值为 baz
。另一方面,三元运算符 (?:
) 在第一个参数为真时总是 return 第二个参数,因此它将 return bar
.
试试 1 && 0 || 2
和 1 ? 0 : 2
。第一个是 2,第二个是 0。
评估三元运算符的最简单方法是作为一个带有三个操作数的运算符
顺便说一下,op1 && op2
可以更简单地写成 op1 ? op2 : op1
。