On Thu, Sep 17, 2015 at 8:21 AM,  <amik...@gmail.com> wrote:
> Hi,
>
> I have a module with a function that I'd like to be overloaded, one version
> should take as an argument a type that I declare somewhere else and later
> (i.e. this module is required before the argument type) and another version
> should be an Array of such a type. That's the idea.
>
> Simple example: I have three files.
>
> In my_module.jl:
>
> function f(s)
>     println(s.x)
> end
>
> function f(sl::Array{Any})
>     for s in sl
>         f(s)
>     end
> end

function f{T}(sl::Array{T})
    .....
end

>
> In my_type.jl:
>
> type state
>     x
>     y
>     z
> end
>
> In my_main.jl:
>
> include("my_module.jl")
> include("my_type.jl")
>
> s1 = state(1.0, 5.0, 7.0)
> s2 = state(2.0, 6.0, 8.0)
> sl = [s1, s2]
>
> println("f(s1)")
> f(s1)
> println("f(s2)")
> f(s2)
> println("f(sl)")
> f(sl)
>
> If I run: julia my_main.jl
> I get this error: "ERROR: type Array has no field x" because it uses the
> first version of the function, nothing prevents it indeed.
>
> I would like to find a way to make it understand it has to choose the second
> version of the function. How could I do that?
>
> Thanks a lot,

Reply via email to