extension Array { func hoge() -> String { return "Default" } // ① } extension Array where Element == S { func hoge() -> String { return "Subtype" } // ② } extension Array where Element: P { func hoge() -> String { return "Protocol" } // ③ } extension Array where Element == P { func hoge() -> String { return "Existence" } // ④ }
[S()].hoge()
で②が呼ばれるのって、ここの優先順位が理由ってことで合っていますか? https://github.com/apple/swift/blob/2f6ca48c75cd5482df594496b0be83e7379f2a77/lib/Sema/CSSimplify.cpp#L1830[S()].hoge()
を swift -frontend -typecheck -debug-constraints
に掛けてみると Constraint restrictions: Array<S> to Array<S> is [deep equality]
と出ました