Thanks for the suggestion. Perhaps this will allow me to finally work
around this issue.

I will file a ticket as suggested as soon as I find time.

Thanks again.

Bill.

On 23 March 2016 at 10:11, Milan Bouchet-Valat <nalimi...@club.fr> wrote:

> Le mardi 22 mars 2016 à 08:37 -0700, 'Bill Hart' via julia-users a
> écrit :
> > 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?
> in() relies on isequal() for some collections like dicts. But that's
> not the issue here, you're not even calling that function. It looks
> like there's a bug with ==. Please file an issue on GitHub about it.
>
> BTW, you can use === with types instead, and it seems to work fine
> here.
>
>
> Regards
>
>
> > 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.
>

Reply via email to