我正在學Swift,對於爲什麼在全球範圍內完成重載,我感到有點困惑。此代碼:爲什麼在Swift中全局範圍內重載==?
class Foo: Equatable {
var name = "Untitled"
}
func == (lhs: Foo, rhs: Foo) -> Bool {
return lhs.name == rhs.name
}
let value1 = Foo()
var value2 = Foo()
let firstCheck = value1 == value2
感覺真的很奇怪,從一個Ruby的背景的,我們宣佈我們是在比較對象上的==
方法:
class Foo
def == (otherFoo)
self.name == otherFoo.name
end
end
,如果我在同一個文件中聲明的幾個類,會發生什麼?或者迅速看看lhs的類型。和rhs。看看在哪裏應用超載?
Swift示例改編自https://developer.apple.com/library/mac/documentation/General/Reference/SwiftStandardLibraryReference/Equatable.html – max 2014-10-29 14:23:18
我很清楚,操作符是在全局範圍內定義的,因爲不是所有的操作符將在邏輯上屬於一個操作數的類型,而不是另一個。在這些情況下,您可以將操作員定義在單獨的文件中,以強調缺乏所有權。 – Jessy 2014-10-29 16:11:55
@Jessy你說的是做蘋果梨比較哪裏的lhs和rhs是不同的類型,或者當重載操作符的類型可能不屬於你? – max 2014-10-29 16:27:08