【发布时间】:2020-12-31 20:44:11
【问题描述】:
谁能解释一下,这是怎么回事:
struct Test {
var value: Int
}
// -----------------------------------
protocol Test1: Equatable {
var value: Int { get set }
}
extension Test1 {
static func == (lhs: Self, rhs: Self) -> Bool {
lhs.value == rhs.value + 1
}
}
// -----------------------------------
protocol Test2: Equatable {
var value: Int { get set }
}
extension Test2 {
static func == (lhs: Self, rhs: Self) -> Bool {
lhs.value == rhs.value + 2
}
}
// -----------------------------------
extension Test: Test1 {}
extension Test: Test2 {}
let a = Test(value: 5)
let b = Test(value: 5)
print(a == b) // true, which is unexpected
如果仅符合Test1 或仅符合Test2,它会按预期工作。
符合Test1 和Test2。起初我认为顺序很重要。但看起来它只是相互抵消!没有任何警告。这是非常违反直觉的。
【问题讨论】: