逻辑运算符无法正常运行的快速短路

Pir*_*omo 0 syntax short-circuiting swift

var anArray = [3, 2, 1]
func sortAndCheck(array: inout [Int]) -> Bool{
    array.sort()
    return array.contains(3)
}

if anArray.contains(3){
    print(anArray) // Prints [3, 2, 1]
}

if anArray.contains(3) && sortAndCheck(array: &anArray){
    print(anArray) // Prints [1, 2, 3]
}
Run Code Online (Sandbox Code Playgroud)

对于第二条if语句,由于anArray.contains(3)已经为真,为什么sortAndCheck(array: &anArray)仍要求值并对anArray排序?在此处输入图片说明

Sul*_*han 5

短路意味着仅当结果已经明确时才对表达式的下一部分进行求值。如果部分之前&&true那么结果还是可以同时falsetrue和下部分进行评估。

情况是:

1. true && true => true
2. true && false => false
3. false && false => false
4. false && true => false
Run Code Online (Sandbox Code Playgroud)

在评估了左操作数之后,我们得到:

true && ??
Run Code Online (Sandbox Code Playgroud)

可以在情况1或2中结束,结果不同。

另一方面,如果我们有:

false && ??
Run Code Online (Sandbox Code Playgroud)

那么结果将是情况3或4,两者都是,false并且表达式将短路。