руководство стиля Джулии говорит следующее:
Не используйте ненужные статические параметры. Функциональная подпись:
foo{T<:Real}(x::T) = ...
должен быть записан как:
foo(x::Real) = ...
Я ожидал, что также применить параметры массива. Однако, если я напишу следующий код:
ret1(x::Real) = x
ret2(x::Array{Float64,2}) = x
ret3(x::Array{Real,2}) = x
ret1(1.0)
ret2(rand(2,2))
ret3(rand(2,2))
то я получаю следующий вывод консоли (используя Julia 0.2.1):
MethodError(ret3,(
2x2 Array{Float64,2}:
0.841121 0.322133
0.469432 0.495438,))
Итак, почему Джулия выдает ошибку для массивов с абстрактными параметрами типа, но не для переменных с абстрактными типами?