设置:我在Julia中有一个功能,它有两个输入,x
和y
。两个输入都是相同类型的数组,其中该类型可以是任何数字类型,Date,DateTime或String。注意,无论输入数组的上述任何元素类型如何,函数的内容都是相同的,所以我不想多次编写该函数。目前,我的定义函数如下:
function MyFunc{T<:Number}(x::Array{T, 1}, y::Array{T, 1})
显然,这会处理数字大小写,但不会处理Date,DateTime或String。
问题:Julia在编写函数的第一行以适应其他类型时最佳做法是什么?注意,表现很重要。
我的尝试:我可以尝试类似:
function MyFunc{T<:Number}(x::Union(Array{T, 1}, Array{Date, 1}, Array{DateTime, 1}, Array{String, 1}) y::Union(Array{T, 1}, Array{Date, 1}, Array{DateTime, 1}, Array{String, 1}))
但是这感觉很笨拙(或者可能不是?)。
链接:我想这与我在Julia上的另一个Stack Overflow问题密切相关,可以找到here。
答案 0 :(得分:4)
答案是使用Union
,即
function MyFunc{T<:Union{Number,Date,DateTime,String}}(x::Array{T, 1}, y::Array{T, 1})
@show T
end
...
julia> MyFunc([1.0],[2.0])
T => Float64
julia> MyFunc(["Foo"],["Bar"])
T => ASCIIString
(使用Julia 0.6.4语法...请参阅stable documentation了解当前语法)