No problem. It's a long and somewhat hard-to-follow discussion. On Mon, Apr 27, 2015 at 6:40 PM, Andrei Zh <[email protected]> wrote:
> Ah, I saw this topic in the digest, but didn't understand it is about name > shadowing. Thanks and sorry for inconvenience. > > On Tuesday, April 28, 2015 at 1:06:45 AM UTC+3, Stefan Karpinski wrote: >> >> https://groups.google.com/forum/#!topic/julia-users/sk8Gxq7ws3w >> >> On Mon, Apr 27, 2015 at 5:42 PM, Andrei Zh <[email protected]> wrote: >> >>> Let's say, we have 2 modules: >>> >>> module A >>> export foo >>> foo(n::Int) = println("A") >>> end >>> >>> >>> module B >>> export foo >>> foo(s::String) = println("B") >>> end >>> >>> and then in REPL: >>> >>> julia> using A >>> julia> using B >>> !julia> methods(foo) >>> # 1 method for generic function "foo": >>> >>> >>> foo(s::String) at /home/<user>/.julia/v0.3/B/src/B.jl:4 >>> >>> so method `A.foo` is shadowed. But at the same time purely in REPL or >>> single module: >>> >>> julia> bar(x::Int) = println("#1") >>> bar (generic function with 1 method) >>> >>> >>> julia> bar(s::String) = println("#2") >>> bar (generic function with 2 methods) >>> >>> >>> !julia> methods(bar) >>> # 2 methods for generic function "bar": >>> >>> >>> bar(x::Int64) at none:1 >>> bar(s::String) at none:1 >>> >>> Methods are added to a function. >>> >>> My question is what is the idea behind this behavior and what to do if >>> `A` and `B` are 2 independent modules, having same method `foo` by >>> coincidence (expect for using qualified names, of course)? >>> >>> >>> >>> >>> >>
