Skip to content

Instantly share code, notes, and snippets.

@creaaa
Created March 30, 2018 23:29
Show Gist options
  • Save creaaa/fa8e69b03c9dcfb994d00e83abfb34b0 to your computer and use it in GitHub Desktop.
Save creaaa/fa8e69b03c9dcfb994d00e83abfb34b0 to your computer and use it in GitHub Desktop.
用法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