如何在Julia中为我自己的复合类型定义":"范围运算符?

use*_*051 1 range matrix colon julia

我有以下类型定义:

type TransitionMatrix
  A :: SparseMatrixCSC{Float64,Int64}
  d :: Array{Float64,1}
  I :: Array{Int64}
end
Run Code Online (Sandbox Code Playgroud)

并且想要允许以下内容:如果我们有T :: TransitionMatrix,我希望范围功能(IE,P [:,1],P [:,3]等)可以用于它TA我该怎么做?我已经做了类似的事情来定义转换矩阵的"大小",如下所示,但我不知道如何让冒号运算符按照我的意愿运行.谢谢!

function Base.size(T :: TransitionMatrix, dim)
  return size(T.A, dim)
end
Run Code Online (Sandbox Code Playgroud)

tho*_*oly 5

你会想要写的版本getindex,并size为您的TransitionMatrix.例如:

import Base: getindex, size
getindex(A::TransitionMatrix, indx1, indx2) = @show (indx1, indx2)
size(A::TransitionMatrix) = size(A.A)
size(A::TransitionMatrix, d::Integer) = size(A.A,d)
Run Code Online (Sandbox Code Playgroud)

然后

julia> A[:,2:3]
(indx1,indx2) = (1:5,2:3)
(1:5,2:3)
Run Code Online (Sandbox Code Playgroud)

解析器扩展:1:size(A,d).