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!