The toplevel module is called "Main". So Main.start(g2, s)

On Mon, Jun 2, 2014 at 9:40 AM, Robert Feldt <robert.fe...@gmail.com> wrote:

> Hi,
>
> I want to be able to call out from a function (defined within a module) to
> a method with a specific name but that is defined outside the module. Let
> me try to show the actual code to help clarify:
>
> module M
>
> abstract G
> s_type(g::G) = g.s_type
>
> function new_s(g::G)
> s = s_type(g)
>  s(g)
> end
>
> # This is the function that should call out to methods named start
> # that are defined outside this module:
> function g(g::G)
>  s = new_s(g)
> println("start(", typeof(g), ", ", typeof(s), ")")
> start(g, s)
> end
>
> abstract S
>
> type DefaultS <: S
> g
> DefaultS(g::G) = new(g)
> end
>
> end
>
> type G2 <: M.G
> s_type
>
> function G2()
>  new(M.DefaultS)
> end
> end
>
> # This is the function I want to call out to from within the module M:
> function start(g::G2, s::M.DefaultS)
> 1
> end
>
> g2 = G2()
> s = M.DefaultS(g2)
>
> Now if I call start directly it does as expected:
>
> julia> start(g2, s)
> 1
>
> But if I call through the g function in the module it complains:
> ulia> M.g(g2)
> start(G2, DefaultS)
> ERROR: no method start(G2, DefaultS)
>  in g at none:15
>
> despite:
>
> julia> methods(start)
> # 1 method for generic function "start":
> start(g::G2,s::DefaultS) at none:2
>
> What have I missed? Thanks for any help,
>
> Robert Feldt
>

Reply via email to