我遇到了一个问题,试图使用其键是包含复合类型的元组的字典。Julia:包含复合类型的包含元组键的字典
下面是一个小例子来复制我的问题:
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
工作,但由于某些原因的字典是没有的。
有谁知道发生了什么事?谢谢。
我向'isequal'和'hash'添加了一些打印语句。出于某种原因,添加到字典导致它调用'isequal'(为什么不哈希?)和用d [r]检查字典不会导致被调用。 – Mageek 2014-10-20 03:36:56
应该导入hash和isequal以使它们过载。导入语句不在代码片段中(它在Iain的下面)。这是否解释了差异? – 2014-10-20 19:27:29
你是正确的,他们需要进口。我确实有,但应该把它放在那里。我会添加它。 – Mageek 2014-10-20 21:16:22