Поведение отличается между Юлией 0,6,3 и Юлией 0,7-альфа.То, что мы имеем в Julia 0.7-alpha, более согласованно, так как в этом случае не имеет значения местоположение пункта where
.
Случай Julia 0.6.3
У вас есть два способа исправитьпроблема с перемещением предложения where
внутри определения функции:
julia> temp1(x::Union{Vector{Int64},NTuple{N,Int64}} where N) = sum(x)
temp1 (generic function with 1 method)
julia> temp1([3,1,5,4])
13
julia> temp1((3,1,5,4))
13
julia> temp2(x::Union{Vector{Int64},NTuple{N,Int64} where N}) = sum(x)
temp2 (generic function with 1 method)
julia> temp2([3,1,5,4])
13
julia> temp2((3,1,5,4))
13
также вы можете избежать необходимости указывать where N
, используя Vararg
, например:
julia> temp3(x::Union{Vector{Int64}, Tuple{Vararg{Int64}}}) = sum(x)
temp3 (generic function with 1 method)
julia> temp3((3,1,5,4))
13
julia> temp3([3,1,5,4])
13
СлучайЮлия 0,7-альфа
Ваша функция будет просто работать:
julia> temp(x::Union{Vector{Int64},NTuple{N,Int64}}) where N = sum(x)
temp (generic function with 1 method)
julia> temp([3,1,5,4])
13
julia> temp((3,1,5,4))
13
также temp1
, temp2
и temp3
будут работать.