【发布时间】:2017-06-05 21:44:25
【问题描述】:
类有一个标识,它们的 hashValue 很容易成为它们在内存中的地址。为什么不是这样?
【问题讨论】:
-
我很确定一个对象的哈希/摘要应该基于它的内容,而不是它的身份或地址——如果一个对象具有“不相关”状态(例如缓存值),那么它不应该是哈希计算的一部分,但 Swift 编译器不知道这一点。如果哈希值基于对象的地址,那么使用内存碎片整理的运行时(如 CLR,它将在 GC 暂停期间移动内存中的对象)将与 Swift 根本不兼容。