複合タイプをメンバーx
とy
で作成したいと思います。しかし、私はそれが非Point2D
の通常の数学関数に参加したいと思います。たとえば、Point2D(1,2) + [1,1]
は、の値が[2,3]
になるようにします。作成方法マトリクス演算で使用できるポイントタイプ
私はWhen is Julia's convert() used?に基づいconvert
とpromote_rule
機能を作成したが、その後、私のタイプはconvert
EDである何かのサブタイプである必要が実現しました。しかし、Vector
またはVector{T}
またはArray
またはAbstractArray
のいずれかのタイプのサブタイプを試みて、自分のタイプを変換に参加させようとすると、私はERROR: invalid subtyping in definition of Point2D
となります。実験として私のタイプにNumber
のサブタイプをtype Point2D{T} <: Number
のようにすると、少なくともファイルはエラーなしでロードされますが、試してみるとPoint2D(1,2) + [1,1]
はERROR: no promotion exists for GridCalc.Point2D{Int64} and Int64
となります。
私はPoint2D
を代わりにmutable struct
にしようとしましたが、<: Vector{T}
も「取らない」でしょう。ここで
はコードです:
type Point2D{T} # Fails when I add <: Vector{T}, etc.
x::T
y::T
end
# Convert a Point2D to a vector of the same type
convert{T1, T2<:Vector{T1}}(::Type{T2}, p::Point2D{T1}) = [p.x, p.y]
# Choose Vector when given the option
promote_rule{T1<:Real, T2<:Point2D{T1}, T3<:Vector{T1}}(::Type{T2}, ::Type{T3}) = T3
質問:
これは、それが2ベクトルであるかのよう
Point2D
は、数学関数に参加できるように正しいアプローチですか?は、どのように私は自分の
Point2D
はこれを行う方法は、AbstractVector{T}
をサブタイプにあるVector{T}
完璧!私は私が近くにいることを知っていた。ありがとう:) – Sonicsmooth