我正在编写一个调用其他函数的函数,直到其中一个返回“ not false”值为止。此值应由main函数返回。 重写此函数的最短方法是什么,这样它就不会两次调用其他函数,并且-如果可能的话-避免使用额外的变量?
function doSomething(){
if (tryA()) return tryA();
if (tryB()) return tryB();
if (tryC()) return tryC();
return screwIt();
}
答案 0 :(得分:6)
答案 1 :(得分:5)
只需在if测试中设置一个变量,然后在if主体中使用它作为返回值
function doSomething(){
if ($ret = tryA()) return $ret;
if ($ret = tryB()) return $ret;
if ($ret = tryC()) return $ret;
return screwIt();
}
答案 2 :(得分:1)
您可以这样做:
function doSomething() {
if ($tryA = tryA()) return $tryA;
if ($tryB = tryB()) return $tryB;
if ($tryC = tryC()) return $tryC;
return screwIt();
}
答案 3 :(得分:1)
如果要调用一堆函数,则可以将它们的名称存储在字符串数组中,然后循环该数组以避免代码重复
function doSomething()
{
$functions = array("tryA", "tryB", "tryC", "tryD", "tryE", "tryF");
// v------------v----- This stops the loop on first non-falsy value found
for ($i = $ret = 0; !(bool)$ret && $i < count($functions); $i++)
{
$ret = $functions[$i]();
}
return $ret ?: screwIt();
}
请注意,如果(bool)$ret
=
$ret
将为假
0
""
"0"
false
null
[]
答案 4 :(得分:1)
如果您只对逻辑值感兴趣,则可以通过逻辑OR运算符简单地枚举它们:
return tryA() || tryB() || tryC() || screwIt();
将从左到右调用该函数,直到非空值为止。结果将转换为false
或true
。
如果确切的值有意义,请使用简化形式的“三元”运算符。像这样:
return tryA() ?: tryB() ?: tryC() ?: screwIt();
仅当tryA()可以解释为false
(即0,null,“,'0”或[])等等时,才会调用tryB()。