Because your a
is not a subtype of Vector{Vector{<:Real}}
(which is a shorthand for what you write):
julia> a = Vector{Vector}(3);
julia> for i in 1:3
a[i] = [i, i+ 1]
end;
julia> a
3-element Array{Array{T,1} where T,1}:
[1, 2]
[2, 3]
[3, 4]
However, this does not work either:
julia> a = Vector{Vector{Int}}(3);
julia> for i in 1:3
a[i] = [i, i+ 1]
end;
julia> a
3-element Array{Array{Int64,1},1}:
[1, 2]
[2, 3]
[3, 4]
julia> f3(a)
ERROR: MethodError: no method matching f3(::Array{Array{Int64,1},1})
Closest candidates are:
f3(::Array{Array{T,1} where T<:Real,1}) at REPL[1]:2
This finally works:
julia> a = Vector{Vector{<:Real}}(3);
julia> for i in 1:3
a[i] = [i, i+ 1]
end;
julia> a
3-element Array{Array{T,1} where T<:Real,1}:
[1, 2]
[2, 3]
[3, 4]
julia> f3(a)
3-element Array{Array{Int64,1},1}:
[2, 4]
[4, 6]
[6, 8]
However, what you probably wanted to do was:
function f3(a::Vector{Vector{T}}) where T<:Real
2a
end
then all of the above a
will work. Search the docs or this forum for “invariance” to find enlightenment (although, it is a bit a tricky subject).
PS: please quote your code snippets using backticks `: PSA: how to quote code with backticks