Hi Rob,

Ok, I see why that "works", but it's a different example.

Assume that m1 and m2 are libraries from different vendors, they know 
nothing about each other, but they both export methods for f().

It is surprising to me that importing two modules would cause one to 
overwrite methods from the other with no warning or error. 

On Friday, December 12, 2014 9:45:37 AM UTC+11, Rob J Goedman wrote:
>
> Sam,
>
> Maybe below slightly expanded version of your example will help.
>
> I think key is to import m1.f in module m2
>
> Regards
> Rob J. Goedman
> [email protected] <javascript:>
>
>
> module m1
>
>   export f
>
>   f(x::ASCIIString) = println("ASCIIString: " * x)
>   f{T<:String}(x::T) = println("  $(typeof(x)): " * x)
>   f(x)         = println("  $(typeof(x)): " * string(x))
> end
>
>
> module m2
>
>   import m1.f
>   export f
>
>   f(x::Int)    = println("Int: " * string(x))
> end
>
> using m1
> using m2
>
> f(7)
> f("Foo")
> f("\u2200 x \u2203 y")
> f(12.0)
> f(2.0+3.0im)
>
>
>
>  
> On Dec 11, 2014, at 2:18 PM, samoconnor <[email protected] <javascript:>> 
> wrote:
>
> The example below has two modules that define methods of function f for 
> different parameter types.
> Both modules are imported.
> It seems like that "using" the second module causes the first one to 
> disappear.
> Is that the intended behaviour?
>
>
> !/Applications/Julia-0.3.0-rc4.app/Contents/Resources/julia/bin/julia
>
> module m1
>
>     export f
>
>     f(x::String) = println("String: " * x)
>     f(x)         = println("     ?: " * string(x))
> end
>
>
> module m2
>
>     export f
>
>     f(x::Int)    = println("   Int: " * string(x))
> end
>
> using m1
> using m2
>
> f(7)
> f("Foo")
>
> output:
>
>    Int: 7
> ERROR: `f` has no method matching f(::ASCIIString)
>
>
>
>

Reply via email to