如何创建构造函数为参数类型字段创建默认值。

4

对于具有参数化类型字段的类型:

struct Point{T <: AbstractFloat}
    x::T
    y::T
end

如何编写一个外部构造函数,以所需类型创建默认值?例如,我想要 Point() 不带参数地创建 Point{T}(0.0, 0.0) ,并且我仍然可以通过某种方式指定 TFloat64 或其他类型。
2个回答

5

这个是否符合您的需求?

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))

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接