Julia 如何创建可在矩阵数学中使用的点类型

Julia 如何创建可在矩阵数学中使用的点类型,julia,Julia,我想创建一个包含成员x和y的复合类型Point2D,这非常简单。但是我想让它参与到非点2D的普通数学函数中。例如,Point2D(1,2)+[1,1]应该产生一个值为[2,3]的向量{Int64} 我根据创建了convert和promote_rule函数,但随后意识到我的类型需要是converted的某个对象的子类型。然而,当我尝试从Vector或Vector{T}中创建子类型时或任何类型的数组或抽象数组为了让我的类型参与转换,我得到了错误:Point2D定义中的子类型无效。如果作为一个实验,我

我想创建一个包含成员
x
y
的复合类型
Point2D
,这非常简单。但是我想让它参与到非点2D的普通数学函数中。例如,
Point2D(1,2)+[1,1]
应该产生一个值为
[2,3]
向量{Int64}


我根据创建了
convert
promote_rule
函数,但随后意识到我的类型需要是
convert
ed的某个对象的子类型。然而,当我尝试从
Vector
Vector{T}中创建子类型时
或任何类型的
数组
抽象数组
为了让我的类型参与转换,我得到了
错误:Point2D定义中的子类型无效
。如果作为一个实验,我将我的类型设为
Number
的子类型,如
typepoint2d{T}中所述,方法是将
抽象向量{T}
分为子类型。在Julia中,只能对抽象类型进行子类型化<代码>向量{T}
是一种具体类型。您还必须实现一些必需的方法。有关更多详细信息,请参阅:

julia> type Point2D{T} <: AbstractVector{T}
           x::T
           y::T
       end
       Base.getindex(p::Point2D, i::Int) = getfield(p, i)
       Base.size(::Point2D) = (2,)

julia> Point2D(1,2)
2-element Point2D{Int64}:
 1
 2

julia> [1 2; 3 4; 5 6] * Point2D(1,2)
3-element Array{Int64,1}:
  5
 11
 17
julia>类型Point2D{T}Point2D(1,2)
二元点2D{Int64}:
1.
2.
朱莉娅>[12;34;56]*Point2D(1,2)
三元素数组{Int64,1}:
5.
11
17

您还可以查看(和/或使用)和以了解其点定义和周围方法。

完美!!我知道我很接近。谢谢:)
julia> type Point2D{T} <: AbstractVector{T}
           x::T
           y::T
       end
       Base.getindex(p::Point2D, i::Int) = getfield(p, i)
       Base.size(::Point2D) = (2,)

julia> Point2D(1,2)
2-element Point2D{Int64}:
 1
 2

julia> [1 2; 3 4; 5 6] * Point2D(1,2)
3-element Array{Int64,1}:
  5
 11
 17