举例说明:实现(||)操作运算
func || (left:Bool, right:Bool)-> Bool {
if left {
return true
}else {
return right
}
}
上面这种解法勉强正确,但是并不高效,或(||)操作的本质是当左边为真的时候,我们无需计算右边。而上面这种是将右边值默认准备好,再传入进行操作。当右边值得计算十分复杂时会造成了性能上的浪费。所以,以上这种做法违反了或(||)操作的本质。正确的实现方法如下:
func ||(left:Bool, right: @autoclosure()->Bool) -> Bool {
if left {
return true
}else {
return right()
}
}
autoclosure可以将右边值的计算推迟到判定left为false的时候,这样就可以避免第一种方法带来的不必要的开销了。