I get a "key not found" error even though the key is clearly in there.  
Here's a stripped down version of the code that produces the error:

# Define my custom type
type Test
  act::Array{Int64}
  obs::Array{Int64}
end

# Have to define an equality operator for the new type
import Base
Base.(:(==))(a::Test, b::Test) = (
  function (a::Test, b::Test)
    (a.act == b.act) && (a.obs == b.obs)
  end ) (a,b)

# Make a Test, use it as a key in a dictionary, 
#  then make a new test that is known to be in the dict
myTest = Test([1], [1])
test2ID = Dict([myTest=>1])
myTestCopy = deepcopy(myTest)

# These work
test2ID[myTest]                        # 1
myTest in keys(test2ID)                # true
myTestCopy in collect(keys(test2ID))   # true
myTest == myTestCopy                   # true

# These fail
test2ID[myTestCopy]           # error: key not found
myTestCopy in keys(test2ID)   # false

So if I index with the original object that I created the dict from, then 
it works.  If I have created a new and identical object, I get "key not 
found" when I index by the new object AND it doesn't appear in the keys() 
of the dictionary.  Puzzlingly, if the keys() are collect()ed then it is 
indeed found.

I suspect this is a bug, but wanted to check with the community before 
opening an issue on github.  Am I doing something wrong?

Thanks in advance.

Reply via email to