如何在Windows PowerShell 4.0中执行短路求值?

17

根据Windows PowerShell 4.0,Technet关于逻辑运算符的说明如下:

Operator     Description                        Example

--------     ------------------------------     ------------------------
-or          Logical or. TRUE when either       (1 -eq 1) -or (1 -eq 2) 
             or both statements are TRUE.       True

-xor         Logical exclusive or. TRUE         (1 -eq 1) -xor (2 -eq 2)
             only when one of the statements    False 
             is TRUE and the other is FALSE.

似乎两者都不执行短路评估。

我该如何在 Windows Powershell 4.0 中模仿 C#||VBOrElse


4
你没有读到那之后的内容,对吗 ;) 在文件的后面你提到了:“Windows PowerShell 逻辑运算符仅评估确定语句的真值所需的语句…” - Andrew Morton
1
@AndrewMorton - 我确实看过了,但是我对-or运算符的描述感到困惑。Keith Hill的回答表明它默认情况下会短路,这帮助我澄清了一些事情。 - Code Maverick
2
从逻辑上讲(啊咳,双关语得到认可),-xor不可能短路...对吧?它必须评估表达式的两侧以确定排他性...对吧? - Code Jockey
@CodeJockey 听起来正确。 - Ohad Schneider
2个回答

29

一组简单的测试用例显示短路运算起作用:

PS C:\> 1 -eq 0 -or $(Write-Host 'foo')
foo
False
PS C:\> 1 -eq 1 -or $(Write-Host 'foo')
True

PS C:\> 1 -eq 1 -and $(Write-Host 'foo')
foo
False
PS C:\> 1 -eq 0 -and $(Write-Host 'foo')
False

2
非常有趣。我一直在想 -or 是否默认执行此操作,但文档却说明不是这样。但现在,重新阅读描述后,它确实说 when either or both,那么我想这意味着它默认情况下会执行某种形式的短路运算。 - Code Maverick
2
默认情况下,-and和-or运算符会进行短路计算。 - Keith Hill
1
但这不是在*nix shell中已经存在几十年的短路。 - rjt

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接