【发布时间】:2014-10-20 03:23:51
【问题描述】:
我在尝试使用其键是包含复合类型的元组的字典时遇到了问题。
这是一个复制我的问题的最小示例:
import Base: hash, isequal
type T
a :: Int
b :: Int
end
function isequal(A::(T,Int), B::(T,Int))
A[1].a == B[1].a && A[1].b == B[1].b && A[2] == B[2]
end
function hash(A::(T,Int))
hash(A[1].a + A[1].b + A[2])
end
d = Dict{(T,Int),Int}()
d[(T(1,1),1)] = 1
d[(T(2,2),2)] = 2
r = (T(2,2),2)
for k in keys(d)
println(isequal(r, k) && hash(r) == hash(k))
end
println(d[r])
运行此结果:
false
true
ERROR: key not found: (T(2,2),2)
所以isequal 和hash 有效,但由于某种原因,dict 无效。
有人知道发生了什么吗?谢谢。
【问题讨论】:
-
我在
isequal和hash中添加了一些打印语句。由于某种原因,添加到字典会导致它调用isequal(为什么不散列?)并使用d[r]检查字典不会导致调用。 -
hash 和 isequal 应该被导入以使它们重载。 import 语句不在 sn-p 中(它在 Iain 的下面)。这是否解释了差异?
-
您说得对,它们需要导入。我确实有,但应该把它放在那里。我会添加它。
标签: julia