2016-03-03 77 views
4

我想要「賦值或」和「賦值和」運算符。根據Swift Standard Library Operators Reference,這些操作符是在標準庫中定義的。實現|| =和&& =操作符:運算符實現沒有匹配運算符聲明

我試圖執行這些運營商Bool值:

func ||= (inout lhs: Bool, rhs: Bool) { 
    lhs = lhs || rhs 
} 

func &&= (inout lhs: Bool, rhs: Bool) { 
    lhs = lhs && rhs 
} 

但是編譯器會抱怨:operator implementation without matching operator declaration

這可以通過定義運營商固定:

infix operator ||= { associativity right precedence 90 } 

infix operator &&= { associativity right precedence 90 } 

但我不當然,這是正確的做法。爲什麼標準庫中的定義不起作用?此外,我注意到,根據運營商的參考標準庫沒有任何類型的這些運營商的實施。這是爲什麼?這是一個疏忽還是有意的?

+0

有趣。但是你的實現對我來說看起來不錯。 –

+0

@ J.Wang是的,它似乎工作正常,但我想知道如果重新實現這些運營商是正確的事情做 –

+0

@dfri啊,我明白了,謝謝!你會發布這個答案嗎? –

回答

3

有關操作員的文檔已過時,這在以前在this answer的評論中已經注意到;我報價的空速速度:

是的,檢查它(編注:指經營者&&=)只是在早期版本中曾經定義爲運營商非常 ,從不 實際上任何實施功能,然後完全刪除。 文檔錯誤。

可以很容易地看到哪些被實際本地定義的運算符,通過Cmd -clicking Swift

import Swift 

在例如一個操場。

或者,看看標準運營商部分中的Policy.swift的源代碼:

在上述兩個,這是顯而易見的是,既不&&=也不||=都是本機定義。


如果你有興趣在這些運營商是如何實現的(在雨燕1.1回),以下後可能會感興趣: