我目前正在研究一種圖形數據類型,在這種情況下,我已經考慮了很多關於身份和平等的語義問題。等於是否意味着相等的散列值?
我現在的情況如下。我有一個Vertex
類型:
final class Vertex<T>: Hashable {
static func ==(lhs: Vertex, rhs: Vertex) -> Bool {
return lhs === rhs
}
var value: T
var hashValue: Int {
return ObjectIdentifier(self).hashValue
}
}
正如你所見,平等是由身份決定的。我之所以這樣做是出於圖形數據類型的特定原因,但它基本上涉及的是頂點應該通過它們的標識來查看,因此如果它們相同(相同的)頂點。
現在哈希值也由身份確定(使用ObjectIdentifier
)。這似乎是獲得散列值的最簡單方法,並且似乎與此類型的平等概念保持一致。
但是,這讓我想...
難道是語義上「不正確」(或不合邏輯的,如果你願意),以確定由哈希值,讓我們說,在value
屬性(如果T
符合Hashable
)。
在這種情況下,兩個Vertex
可以一致地具有相同的散列值(不只是對於程序的一次調用),而不被認爲是相等的。這看起來不正確。
因此反過來說:是否明智地說實例的平等意味着它們的散列值是相等的?