在Julia中使用复合类型的push!
时,isequal
函数似乎会向集合中添加重复项。阅读Julia标准文档,我假设t2
函数将用于测试重复项。我想我误解了,所以也许有人可以帮助我。
作为示例,请参阅下面的代码。特别是,我想知道为什么t1
被添加到集合中,尽管与t
相同。
非常感谢任何帮助。注意:在我的情况下,如果字段x1
和x2
相等,则type t
x1::Float64
x2::Float64
b1::Bool
b2::Bool
end
isequal( tx::t, ty::t) = (tx.x1 == ty.x1) && (tx.x2 == ty.x2)
==(tx::t, ty::t) = (tx.x1 == ty.x1) && (tx.x2 == ty.x2)
t1 = t( 1, 2, true, true)
t2 = t( 1, 2, true, true)
tc = t1
tdc = deepcopy( t1)
[ t1 == t2 isequal( t1, t2)] # ---> [ true true ]
[ t1 == tc isequal( t1, tc)] # ---> [ true true ]
[ t1 == tdc isequal( t1, tdc)] # ---> [ true true ]
s = Set{t}()
push!( s, t1)
push!( s, t2) # adds t2 to the set although t2 and t1 are identical ...
push!( s, tc) # does not add ...
push!( s, tdc) # adds tdc although tdc and t1 are identical
类型的两个变量被视为相同;其余字段的值无关紧要。
{{1}}
答案 0 :(得分:7)
正如DSM所示,您只需为您的类型添加(%esp)
方法,即:
hash