对于集合(不可变)和字符串(可变)===&引用;不';t似乎不符合Julia中的文档(至少1.5版)
我想我遗漏了一点,因为在我的测试中,“==”的行为似乎与文档不符 文档中说“首先比较x和y的类型。如果它们相同,可变对象将按内存中的地址进行比较,不可变对象(如数字)将按位级别的内容进行比较” 我从这个定义中了解到:对于集合(不可变)和字符串(可变)===&引用;不';t似乎不符合Julia中的文档(至少1.5版),julia,immutability,equality,mutable,Julia,Immutability,Equality,Mutable,我想我遗漏了一点,因为在我的测试中,“==”的行为似乎与文档不符 文档中说“首先比较x和y的类型。如果它们相同,可变对象将按内存中的地址进行比较,不可变对象(如数字)将按位级别的内容进行比较” 我从这个定义中了解到: 对于可变对象,两个不同的对象(即不同的内存地址)不应为“==” 对于不可变对象,当内容相同时,它们应为“=” 但是: 集合是不可变的,但内容中的两个相同对象不是“==” 返回false set1 === set2 返回false,但根据文档,应返回true,因为set1和s
- 对于可变对象,两个不同的对象(即不同的内存地址)不应为“
”==
- 对于不可变对象,当内容相同时,它们应为“
”=
==
”
返回false
set1 === set2
返回false
,但根据文档,应返回true
,因为set1
和set2
是两个内容相同的不可变对象。(或ismutable(set1)
应返回true
?)
字符串是可变的,但两个不同的对象是“=
”
返回true
string1 === string2
返回true
,但根据文档,应该返回false
,因为string1
和string2
是两个不同的可变对象,因此它们在内存中的地址应该不同。(或ismutable(string1)
应返回false
?)
我遗漏了什么?这些案例很棘手,我同意这不是直观的<代码>设置更容易解释
Set
定义为:
struct Set{T} <: AbstractSet{T}
dict::Dict{T,Nothing}
Set{T}() where {T} = new(Dict{T,Nothing}())
Set{T}(s::Set{T}) where {T} = new(Dict{T,Nothing}(s.dict))
end
struct Set{T}所以在实践中,集合是不可变的,但是可变的,字符串是可变的,但是不可变的;-)我从未在代码中使用过ismutable
。我认为最好将其视为一个低级函数,在处理内部时使用它来获取变量类型的可变
字段。实际上,通过您对这个问题的回答和我的回答,我现在更好地理解了=
和=
运算符。谢谢
string1 === string2
struct Set{T} <: AbstractSet{T}
dict::Dict{T,Nothing}
Set{T}() where {T} = new(Dict{T,Nothing}())
Set{T}(s::Set{T}) where {T} = new(Dict{T,Nothing}(s.dict))
end