I don’t understand why get(d, k, default) allows default to be of a type different than valtype(d). This violates type-stability, and it has been a source of may bugs for me. I have heard an argument that sometimes people return something else to signal that the key was not found. But isn’t that what haskey is for?
Julia is a dynamic language, so it doesn’t generally enforce type stability. Notably, using nothing as a default can be useful in some cases. I agree sometimes it would be nice to have get call convert(valtype(d), default), but that would be less flexible/general. Note that calling haskey first and then get/getindex requires looking up the key twice, which has a performance impact.
2 Likes