带与号的三元运算符[重复]

Posted

技术标签:

【中文标题】带与号的三元运算符[重复]【英文标题】:ternary operator with ampersand [duplicate] 【发布时间】:2015-09-24 21:43:24 【问题描述】:

我在代码中的某处使用了跟随:

if (isset($flat[$pid])) 
  $branch = &$flat[$pid]['items'];
 else 
  $branch = &$tree;
    

一切正常,但是当我想将其缩短为:

$branch = isset($flat[$pid]) ? &$flat[$pid]['items'] : &$tree;

我明白了:

语法错误,意外的'&' ...

我做错了什么?

【问题讨论】:

***.com/questions/3389928/… 【参考方案1】:

这是因为ternary operator 是一个表达式,所以它不会计算为变量。并引用手册:

注意:请注意,三元运算符是一个表达式,它不会计算为变量,而是计算表达式的结果。了解是否要通过引用返回变量很重要。语句 return $var == 42 ? $a : $b;因此,在按引用返回的函数中将不起作用,并且在以后的 php 版本中会发出警告。

【讨论】:

【参考方案2】:

这将作为替代方案,

(isset($flat[$pid])) ? ($branch = &$flat[$pid]['items']) : ($branch = &$tree);

编辑:

最短可以走两行,

@$temp = &$flat[$pid]['items'];
$branch = &$isset($flat[$pid]) ? "temp" : "tree";

【讨论】:

非常神秘:) 在这种情况下我更喜欢if 子句。

以上是关于带与号的三元运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

kotlin中的三元运算符[重复]

Kotlin三元运算符[重复]

Kotlin 等效于三元运算符 [重复]

从三元运算符返回 lambda [重复]

具有不同类型表达式的三元运算符[重复]

Python:拥有三元运算符的有效方法[重复]