【问题标题】:How to make constructors that create default values for the parametrically typed fields如何创建为参数类型字段创建默认值的构造函数
【发布时间】:2021-06-10 07:41:12
【问题描述】:
对于具有参数类型字段的类型,例如:
struct Point{T <: AbstractFloat}
x::T
y::T
end
如何创建一个外部构造函数来创建具有所需类型的默认值?例如,我想要Point(),它不带任何参数来创建Point{T}(0.0, 0.0),我仍然可以通过某种方式将T 指定为Float64 或其他类型。
【问题讨论】:
标签:
types
constructor
julia
default-value
parametric-polymorphism
【解决方案1】:
如果您不介意添加额外的依赖项,包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
【解决方案2】:
这是你想要的吗?
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))