Fre*_*k P 4 type-declaration julia
我应该在 Julia 中为可以是标量或数组的函数参数指定什么类型?例如,在下面的函数中x, andy可以是例如Float64或Array{Float64}。
function myfun(x, y)
return x .+ y
end
Run Code Online (Sandbox Code Playgroud)
此类变量是否有适当的类型声明?或者我应该避免在那里声明类型(或编写通用函数)?
您可以安全地避免指定类型。这不会对代码的性能产生影响。
但是,如果您想显式指定您提供的类型限制(这对于确保使用正确的参数调用您的函数非常有用,如果不是,则快速失败):
function myfun(x::Union{Float64, Array{Float64}},
y::Union{Float64, Array{Float64}})
return x .+ y
end
Run Code Online (Sandbox Code Playgroud)
但是,您很可能更想要以下签名:
function myfun(x::Union{AbstractFloat, AbstractArray{<:AbstractFloat}},
y::Union{AbstractFloat, AbstractArray{<:AbstractFloat}})
return x .+ y
end
Run Code Online (Sandbox Code Playgroud)
这表示您接受任何标量浮点或任何浮点数组(不一定只是Float64和Array)。这更加灵活,例如,如果您希望切换计算精度,您可以接受视图 then 或其他浮点数(BigFloat或)。Float32这样的签名清楚地向您的用户表明您希望他们传递什么类型的输入myfun,同时保持灵活性。
我建议这样做,因为它过于严格(Union{Float64, Array{Float64}}),虽然被编译器接受,但通常会在稍后开始使用具有各种输入类型的函数时导致问题。
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |