I'm having trouble understanding the following behaviour in 0.5.0-dev+3171.
I wonder if someone can tell me what I'm doing wrong.
module Mymod
type mytype
end
end
sig_table = [x.sig for x in methods(Base.promote_rule)]
V = Tuple{typeof(Base.promote_rule),Type{Mymod.mytype},Type{Int64}}
V in sig_table # returns true!!
for s in sig_table # prints yes
if V == s
println("yes")
end
end
for s in sig_table # prints nothing
if s == V
println("yes")
end
end
Can someone explain what the difference between == and "in" is. For
example, why shouldn't == be symmetric? And why should "in" tell me
something is in an array that is clearly not in there?
Metaquestion: what is the easiest way of checking if a promote_rule already
exists? We have to create promote_rules at run time in response to user
input (so it can't be done statically) and now the Julia compiler complains
with pages of warnings because we are overwriting existing promote rules
(actually, we are, harmlessly). We want to get rid of the warnings and the
easiest way is to check if that promote rule already exists before defining
it again.
We can't just do method_exists because it always returns true for
promote_rule, with any signature. So we need to check whether the promote
rule with the precise signature we want to define already exists. For
example
method_exists(Base.promote_rule, Tuple{Type{Mymod.mytype}, Type{Int}})
returns true.
Bill.