对于具有参数化类型字段的类型:
struct Point{T <: AbstractFloat}
x::T
y::T
end
如何编写一个外部构造函数,以所需类型创建默认值?例如,我想要
Point()
不带参数地创建 Point{T}(0.0, 0.0)
,并且我仍然可以通过某种方式指定 T
为 Float64
或其他类型。对于具有参数化类型字段的类型:
struct Point{T <: AbstractFloat}
x::T
y::T
end
Point()
不带参数地创建 Point{T}(0.0, 0.0)
,并且我仍然可以通过某种方式指定 T
为 Float64
或其他类型。这个是否符合您的需求?
julia> struct Point{T <: AbstractFloat}
x::T
y::T
end
julia> Point{T}() where T = Point{T}(zero(T), zero(T))
julia> Point{Float64}()
Point{Float64}(0.0, 0.0)
julia> Point{Float32}()
Point{Float32}(0.0f0, 0.0f0)
julia> Point{Float16}()
Point{Float16}(Float16(0.0), Float16(0.0))
Parameters.jl
提供了宏@with_kw
,可以按以下方式指定默认值:using Parameters
@with_kw struct Point{T <: AbstractFloat}
x::T = 0.0
y::T = 0.0
end
julia> Point()
Point{Float64}
x: Float64 0.0
y: Float64 0.0
julia> Point{Float32}()
Point{Float32}
x: Float32 0.0f0
y: Float32 0.0f0