为什么添加可变会产生不同的哈希值?
Why does adding mutable produce different hash values?
我有一个像这样的简单 struct
,没有自定义 ==
或 hash()
方法:
struct IntroductionMessage
message::String
end
当我调用 hash()
两个 return 相同的值时:
say_hello_introduction = IntroductionMessage("Hello World")
say_hello_introduction_alternate = IntroductionMessage("Hello World")
hash(say_hello_introduction))
hash(say_hello_introduction_alternate))
# Output:
3650104434
3650104434
当我添加 mutable
关键字时,现在是 mutable struct IntroductionMessage
,hash()
值不同:
2957940122
238434212
字符串本身从未改变,那么为什么添加 mutable
会产生不同的结果?
默认情况下,不可变 struct
按值散列,而 mutable struct
按引用散列。这与默认的相等操作匹配。
我有一个像这样的简单 struct
,没有自定义 ==
或 hash()
方法:
struct IntroductionMessage
message::String
end
当我调用 hash()
两个 return 相同的值时:
say_hello_introduction = IntroductionMessage("Hello World")
say_hello_introduction_alternate = IntroductionMessage("Hello World")
hash(say_hello_introduction))
hash(say_hello_introduction_alternate))
# Output:
3650104434
3650104434
当我添加 mutable
关键字时,现在是 mutable struct IntroductionMessage
,hash()
值不同:
2957940122
238434212
字符串本身从未改变,那么为什么添加 mutable
会产生不同的结果?
默认情况下,不可变 struct
按值散列,而 mutable struct
按引用散列。这与默认的相等操作匹配。