Let’s say that I create a new struct called MyMatrix
:
import Base: size, getindex
struct MyMatrix{T} <: AbstractMatrix{T}
X::Matrix{T}
function MyMatrix(n::Int)
new{Float64}(rand(n,n)) # For sake of the example
end
end
Base.size(X::MyMatrix) = size(X.X)
Base.getindex(X::MyMatrix, inds...) = getindex(X.X, inds...)
Now, if I use -
from Base, the type MyMatrix
is not preserved (which is expected):
julia> X = MyMatrix(2)
2×2 MyMatrix{Float64}:
0.984525 0.843545
0.862174 0.266042
julia> X .- 1
2×2 Array{Float64,2}:
-0.0154746 -0.156455
-0.137826 -0.733958
The question is: how can I extend -
so that it uses .
notation and preserves MyMatrix
type? Ideally, I’d want:
julia> X .- 1
2×2 MyMatrix{Float64,2}:
-0.0154746 -0.156455
-0.137826 -0.733958
Thanks!