为什么结构和可变结构具有不同的默认相等运算符?

log*_*ick 8 julia

我有以下代码:


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
Run Code Online (Sandbox Code Playgroud)

为什么两个对象在是普通结构时相等,而在可变结构时不相等?

Bog*_*ski 5

原因是默认情况==下回退到===. 现在的工作方式===是(引用文档):

首先比较 x 和 y 的类型。如果它们相同,则可变对象按内存中的地址进行比较,而不可变对象(例如数字)则按位级别的内容进行比较。

因此,对于Point不可变的 ,执行内容的比较(在您的情况下是相同的)。WhilePoints是可变的,因此比较传递对象的内存地址,它们是不同的,因为您创建了两个不同的对象。