グローバル スコープでメソッドを宣言する方法について言及しているこのSwift Equatable Protocolの質問に対する回答を見てきました。==
を採用しない場合でも、2 つの型が等しいかどうかをテストするようにEquatable宣言できます。==
// extension Foo: Equatable {}
func ==(lhs: Foo, rhs: Foo) -> Bool {
return lhs.bar == rhs.bar
}
struct Foo {
let bar:Int
}
その実装をグローバル スコープで宣言する必要があるという事実は、たとえ採用されたとしても、それがプロトコルに付随しており、プロトコルとは異なるように思わせます。Equatable
プロトコルは、Equatable型がプロトコルの必要なメソッドを実装したことを (私たちと) コンパイラに安全に知らせるだけの構文糖衣以上のものであるでしょうか?
プロトコルであっても、オペレーターの実装をグローバルに宣言する必要があるのはなぜですか? これは、オペレーターの派遣方法が異なるためですか?