在Julia中为多种类型的输入定义一个函数

Col*_*ers 5 types julia

设置:我在Julia中有一个函数,它有两个输入,xy.两个输入都是相同类型的数组,其中该类型可以是任何数字类型,Date,DateTime或String.注意,无论输入数组的上述任何元素类型如何,函数的内容都是相同的,所以我不想多次编写该函数.目前,我有这样定义的功能:

function MyFunc{T<:Number}(x::Array{T, 1}, y::Array{T, 1})
Run Code Online (Sandbox Code Playgroud)

显然,这会处理数字大小写,但不会处理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}))
Run Code Online (Sandbox Code Playgroud)

但这感觉很笨拙(或者可能不是?).

链接:我想这与我在Julia上的另一个Stack Overflow问题密切相关,可以在这里找到.

Iai*_*ing 4

答案是使用 a Union,即

function MyFunc{T<:Union{Number,Date,DateTime,String}}(x::Array{T, 1}, y::Array{T, 1})
    @show T
end
Run Code Online (Sandbox Code Playgroud)

...

julia> MyFunc([1.0],[2.0])
T => Float64

julia> MyFunc(["Foo"],["Bar"])
T => ASCIIString
Run Code Online (Sandbox Code Playgroud)

(使用 Julia 0.6.4 语法...请参阅当前语法的稳定文档)

  • 我认为这只是可读性的问题,尽管对于这个带有两个参数的特定示例,它们实际上意味着不同的东西。参数版本要求两个数组具有相同的元素类型,但每个参数都是联合类型的数组将允许“x”和“y”不同 (2认同)