我有以下代码:
julia> struct Point
x
y
end
julia> Point(1,2) == Point(1,2)
true
julia> mutable struct Points
x
y
end
julia> Points(1,2) == Points(1,2)
false
为什么两个对象在普通结构中是相等的,而在可变结构中为什么不相等?
==
降为===
。现在===
的工作方式是(引用文档):首先比较x和y的类型。如果相同的话可变对象通过内存中的地址与不可变对象(例如数字)进行比较将按位级别的内容进行比较。
因此Point
是不可变的,将进行内容比较(在您的情况下相同)。尽管Points
是可变的,所以比较了传递的对象的内存地址,并且由于创建了两个不同的对象,它们是不同的。
为什么在可变类型和不可变类型之间存在===
定义的差异。原因是您的不变结构Point
实际上是无法区分的。由于它们无法更改,因此它们的值将始终相同,因此它们也可能是同一对象的两个名称。因此,在语言中,它们仅由其值定义。
因此,===
定义不同的原因是,可以区分两个相同的可变结构,但不能区分两个不可变的结构。