- 并且操作员不执行第二部分

时间:2014-12-15 16:40:35

标签: powershell

我有这个

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 !!!这里发生了什么?

为了澄清,第一段代码被破坏,第二段代码有效,但是更长。我只想要解释,因为我肯定在这里缺少一些基本的东西。我不习惯使用语言而我不理解它的谓词逻辑。

1 个答案:

答案 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))))