【问题标题】: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))
      

      【讨论】:

        猜你喜欢
        • 2019-02-25
        • 2023-01-29
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        • 1970-01-01
        • 2018-10-02
        • 2016-02-13
        • 2012-11-03
        相关资源
        最近更新 更多