Created
March 30, 2018 23:29
-
-
Save creaaa/fa8e69b03c9dcfb994d00e83abfb34b0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
用法1(実際にはEquatableに適合してないが、==はたまたま持ってる)で作ったQueueを... | |
extension Queue where Element: Equatable { | |
static func ==(lhs: Queue<Element>, rhs: Queue<Element>) -> Bool { | |
// `Queue`が内部に持つ要素とその順序がすべて同じなら、同じとみなす | |
return lhs.elements == rhs.elements | |
} | |
} | |
実際に`Equatable`に適合させるのは、こうすればできる。ー「本来であれば」 | |
// extension Queue: Equatable {} // エラー | |
なんで今回はエラーになるのか??? | |
...上のextension定義をもう一度みてほしい。 | |
extension Queue where Element: Equatable、 | |
つまり、Queueのうち、「一部のQueueに限っては」、==を持つ、という定義だ。 | |
つまり、反対に、もう一部のQueueは、==を持っていない。 | |
よって全てのQueueが == を持っているわけではないため、 | |
extension Queue: Equatable {} で 適合できない、というわけだ。 | |
コンパイラまじで頭良すぎ。 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment