我正在编写一些软件,其中涉及一个数量的各种函数形式的库。我想利用 Julia 的多重调度,但想知道是否有更有效的方法来实现这个过程。
例如,考虑一个包含以下两个函数的库
function firstfunction(x::Float64)
return 2*x
end
function secondfunction(x::Float64)
return x^2
end
我还想实现多个调度方法,可以将这些函数形式应用于值向量或向量数组(矩阵)。我可以这样做
function firstfunction(x::Float64)
return 2*x
end
function firstfunction(xs::Vector{Float64})
f = similar(xs)
for i = 1:size(xs, 1)
f[i] = 2*xs[i]
end
return f
end
function firstfunction(xss::Matrix{Float64})
f = similar(xss)
for i = 1:size(xss, 1)
for j = 1:size(xss, 2)
f[i, j] = 2*xss[i, j]
end
return f
end
function secondfunction(x::Float64)
return x^2
end
function secondfunction(xs::Vector{Float64})
f = similar(xs)
for i = 1:size(xs, 1)
f[i] = xs[i]^2
end
return f
end
function secondfunction(xss::Matrix{Float64})
f = similar(xss)
for i = 1:size(xss, 1)
for j = 1:size(xss, 2)
f[i, j] = xss[i, j]^2
end
return f
end
但是由于该函数的所有三个版本都使用相同的内核,并且各种调度的操作在所有函数形式中都是相同的,我想知道是否有更有效的方法来编写它,以便为库(例如thirdfunction
)只涉及显式编写内核函数,而不必为库中的函数形式键入2*n
基本相同的函数。n