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)?
>>>
>>>
>>>
>>>
>>>
>>

Reply via email to