我遇到了一個問題,試圖使用其鍵是包含複合類型的元組的字典。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