我有这个
return $(check-age-name-date($File) -or $(check-name-debugtxt($File) -and check-age-last-mod($File)))
看起来非常直截了当,但我不得不将其更改为:
if(check-age-name-date($File)) {
return $True
} else {
if(check-name-debugtxt($File)){
if(check-age-last-mod($File)){
return $True
}else{
return $False
}
} else {
return $False
}
}
它从未执行过check-age-last-mod。如果check-age-name-date为false且check-name-debugtxt为true,则只返回true而不调用check-age-last-mod !!!这里发生了什么?
为了澄清,第一段代码被破坏,第二段代码有效,但是更长。我只想要解释,因为我肯定在这里缺少一些基本的东西。我不习惯使用语言而我不理解它的谓词逻辑。
答案 0 :(得分:2)
您需要更多括号:
return $((check-age-name-date($File)) -or ((check-name-debugtxt($File)) -and (check-age-last-mod($File))))
简单地说,你有:
$a -or ($b -and $c)
但是因为你在调用函数时需要在比较之前评估每个函数的结果,所以你需要将每个函数调用包装在括号中,所以你有
(f($a)) -or ((f($b)) -and (f($c)))
因为你想要评估整个事物,所以还需要用括号括起来
((f($a)) -or ((f($b)) -and (f($c))))