Since you haven't explicitly imported MyType.bar, when you defined bar
again, it created a new, unrelated function Main.bar, rather than merging
them


On Friday, August 1, 2014, Dustin Lee <[email protected]> wrote:

> Given two files:
>
> SomeLibrary.jl
> ===============
> module SomeLibrary
>
> export MyType, foo, bar
>
> abstract MyType
>
> function bar(mt::MyType)
>     println("I'm in MyType/bar")
>     mt.x * 3
> end
>
> function foo(mt::MyType)
>     bar(mt) + 1
> end
>
> end
>
>
> main_program.jl
> ===============
>
> using SomeLibrary
>
> type NewType <: MyType
>     x
> end
>
> function bar(nt::NewType)
>     println("I'm in NewType/bar")
>     nt.x * 2
> end
>
> println(foo(NewType(10)))
>
>
>
>
> When running main_program.jl  I'd expect:
>
> I'm in NewType/bar
>
> But instead I get
>
> I'm in MyType/bar
>
> So I guess my expectations are a little messed up.  I'm hoping someone can
> help me think through the logic of scoping here.
>
> Why isn't the more specific type function being used?
>
> I'm on Julia 0.3.
>
> thanks
>
>

Reply via email to