Я пытаюсь поддерживать возможность повторного использования кода, используя тип Array
, но не знаю, как действовать, не пропуская «недопустимые» типы. Пример функциональности:
foo = function(x::Array{Number,2})
print(x)
end
foo([1 2 3; 4 5 6; 7 8 9])
# 15
foo([1 2 3])
# MethodError: no method matching (::Array{Int64,1})
# Closest candidate is (::Array{Number,2})
foo(["alpha" "beta"; "pi" "rho"])
# MethodError: no method matching (::Array{String,2})
# Closest candidate is (::Array{Number,2})
Однако в первом примере foo([1 2 3; 4 5 6; 7 8 9])
возвращается с MethodError: no method matching (::Array{Int64,2})
, хотя теоретически (::Array{Number,2})
является действительной рекламой. Я не хочу вручную конвертировать для каждого вызова функции; и при этом я не хочу объявлять все массивы типа Array{Number,2}
. Я знаю, что вместо этого я мог бы заменить вызов функции на:
foo = function(x::Array)
print(x)
end
Однако это позволяет использовать массивы любой размерности и типа в функции. Единственная альтернатива, о которой я могу подумать, - это добавить шаблонный код, где я изначально разрешаю вводить все массивы, проверять их типизацию и размер вручную и переходить оттуда, но это выглядит не элегантно.
Есть предложения? Заранее спасибо. (Примечание: я использую Julia 0.6.3)