我是朱莉娅的新手,鉴于我的Matlab起源,我在确定如何编写利用多个调度和Julia的类型系统的"好"Julia代码时遇到了一些困难.
考虑我有一个提供a的平方的函数的情况Float64.我可以这样写:
function mysquare(x::Float64)
return(x^2);
end
Run Code Online (Sandbox Code Playgroud)
有时,我想Float64在一维数组中对所有s 进行平方,但不想mysquare每次都写出一个循环,所以我使用多次调度并添加以下内容:
function mysquare(x::Array{Float64, 1})
y = Array(Float64, length(x));
for k = 1:length(x)
y[k] = x[k]^2;
end
return(y);
end
Run Code Online (Sandbox Code Playgroud)
但是现在我有时正在使用Int64,所以我写了两个利用多个调度的函数:
function mysquare(x::Int64)
return(x^2);
end
function mysquare(x::Array{Int64, 1})
y = Array(Float64, length(x));
for k = 1:length(x)
y[k] = x[k]^2;
end
return(y);
end
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?或者是否有更具思想性的方法来应对这种情况?我应该使用这样的类型参数吗?
function mysquare{T<:Number}(x::T)
return(x^2);
end
function mysquare{T<:Number}(x::Array{T, 1})
y = Array(Float64, length(x));
for k = 1:length(x)
y[k] = x[k]^2;
end
return(y);
end
Run Code Online (Sandbox Code Playgroud)
这感觉很合理,但我的代码运行速度会与避免参数类型的情况一样快吗?
总之,我的问题分为两部分:
如果快速代码对我很重要,我应该如上所述使用参数类型,还是应该为不同的具体类型写出多个版本?或者我应该完全做其他事情? …