我有两个函数a()
,并且b()
都返回一个布尔值。我知道一旦知道结果就会停止对逻辑表达式的评估,但是有没有办法以两个函数都执行的方式对两个或多个函数执行逻辑运算?
问问题
252 次
4 回答
2
根据您的需要,这可能是可能的(按照@JakobPogulis 的回答):
PHP:
function a() {
print("A");
return true;
}
function b() {
print("B");
return false;
}
var_dump((boolean)(intval(a()) | intval(b())));
var_dump((boolean)(intval(a()) & intval(b())));
JavaScript:
function a()
{
console.log("A");
return true;
}
function b()
{
console.log("B");
return false;
}
console.log(Boolean(Number(a()) & Number(b())));
console.log(Boolean(Number(a()) | Number(b())));
于 2013-07-10T11:03:42.493 回答
2
根据对PHP 手册的评论
一旦知道结果,就停止对逻辑表达式的求值。如果你不想这样,你可以用 min() 替换 and 运算符,用 max() 替换 or 运算符。
因此,此代码可能对您有用,因为您可以看到在每种情况下都调用了所有函数,是的,您可以将其与两个以上的函数一起使用:-
function a()
{
echo "function a<br/>\n";
return true;
}
function b()
{
echo "function b<br/>\n";
return false;
}
function c()
{
echo "function c<br/>\n";
return false;
}
echo min(a(), b(), c());
echo "<br/>";
echo max(a(), b(), c());
echo "<br/>";
输出:-
function a
function b
function c
(false)
function a
function b
function c
(true)
于 2013-07-10T11:08:06.293 回答
0
如果要求两个函数都应执行,则不可能用单个语句保证此行为。起初您可能认为可以使用合取或析取,但这两种构造都是惰性的,这意味着一旦知道它们为真(对于析取)或假(对于合取),它们就会停止评估。
function a() {
print("A");
return true;
}
function b() {
print("B");
return false;
}
$disjunction = a() || b(); // prints A, not B
$conjunction = b() && a(); // prints B, not A
上面的代码只会输出AB
,而不是ABBA
你所期望的。这是因为当一个值为真时,析取总是为真,而当一个值为假时,合取总是为假。
添加
如果出于某种原因确实需要这种行为,PHP 函数如map
,reduce
和filter
可用于评估多个语句并最终得到一个布尔值答案。尽管这将需要您创建额外的函数来支持评估(可以与create_function
函数一起使用),并且不会像使用多行那样具有可读性,并且如果遇到这种情况,调试起来会困难得多。
于 2013-07-10T10:47:35.807 回答
-3
你的意思是像下面这样的吗?
var bothTrue;
if(a() && b()) {
bothTrue = true;
}
else {
bothTrue = false;
}
或者你所说的“另类”具体是什么意思?
于 2013-07-10T10:41:57.173 回答