Julia 我应该在什么时候使用“==`vs`==`vs`isequal`
我知道朱莉娅有三种不同的方式 做平等的事Julia 我应该在什么时候使用“==`vs`==`vs`isequal`,julia,Julia,我知道朱莉娅有三种不同的方式 做平等的事 =、==和isequal 我应该使用哪种,何时使用?=是内置的等式。 在基本体上,这是值相等:如果它们具有相同的位级表示,则它们相等 在可变结构上,它是引用相等:如果它们是相同的内存位置,则它们是相等的 在不可变结构上,这是结构相等:如果两个结构属于同一类型,并且它们的所有字段都相等,则这两个结构相等 在所有3种情况下,这或多或少只是位级别的相等,对内存的引用是指针。 (但是为了使不可变结构版本递归,需要一些想象力) 理想情况下,人们不会使用这么多,
=
、==
和isequal
我应该使用哪种,何时使用?=
是内置的等式。
- 在基本体上,这是值相等:如果它们具有相同的位级表示,则它们相等
- 在可变结构上,它是引用相等:如果它们是相同的内存位置,则它们是相等的
- 在不可变结构上,这是结构相等:如果两个结构属于同一类型,并且它们的所有字段都相等,则这两个结构相等
=
是通用等式
它是可重载的。
对于浮点数,它遵循IEEE规则,即-0.0==0.0
,NaN!=NaN
。
它遵循missing==missing
的3值逻辑规则,导致missing
如果未定义=
,则返回到==
如果已经定义了=
,则需要将哈希定义为isequal
返回到使用=
,请参见下文
isequal
对于词典来说是平等的。
我不知道还有什么更好的说法。
对于Dict
和Set
而言,isequal
被认为是相同的。
因此,在Dict
中,不能将两个isequal
项作为不同的键
如果要确保NaN
s彼此相等,请使用此选项,
同样地,缺失是相等的
定义isequal
时,还必须定义hash
。
isequal(a,b)
意味着hash(a)==hash(b)
如果未定义isequal
,则返回到=
基本上:
- 当您对两个对象的值感兴趣时:
1==1
->true
和1==1.0
->true
==
当您想确保两个对象无法区分时(包括指向不同内存的数组):1===1
->true
但是1===1.0
->false
和A=[1,2,3];B=[1,2,3]
导致A==B
->true
但A==B
->false
(A==A
->true
)
isequal()
与=
相同,但处理浮点数的方式不同:NaN==NaN
->false
但isequal(NaN,NaN)
->true
更深入的讨论。相关:检查后,此处将对其进行解释