Search code examples
arraysjuliastrong-typing

Usage of Array of abstract types in Julia


I'm exploring Julia so I'm a newbie. Now I'm exploring its strongly typed features. What I'm realizing is that I can't see the usage of abstract types for arrays. Let me explain with an example:

Let's suppose that I would like to create a function which accepts arrays of reals, no matter its concrete type. I would use:

function f(x::Array{Real})
  # do something
end

This function can be never called without raising a f has no method matching f(::Array{Float64,1})

I would like to call f([1,2,3]) or f([1.,2.,3.]) as long as the type of the element is Real.

I've read that you could promote or convert the array (p.eg f(convert(Array{Real}, [1, 2, 3])) or so) but I see that way really non-dynamic and tedious.

Is there any other alternative rather than getting rid of the strongly typed behaviour?

Thanks.


Solution

  • To expand upon the solution by @user3580870, you can also use a typealias to make the function definition a little more succinct:

    typealias RealArray{T<:Real} Array{T}
    f(x::RealArray) = "do something with $x"
    

    And then you can use the typealias in anonymous functions, too:

    g = (x::RealArray) -> "something else with $x"