2014-09-18 6 views
1

У меня есть следующее определение типа:Как определить оператор диапазона «:» для моего собственного составного типа в Джулии?

type TransitionMatrix 
    A :: SparseMatrixCSC{Float64,Int64} 
    d :: Array{Float64,1} 
    I :: Array{Int64} 
end 

и хотели бы, чтобы на следующее: если мы имеем T :: TransitionMatrix, я хотел бы функциональность диапазона (IE, P [:, 1], P [:, 3] и т. Д.), Чтобы работать над ним для TA Как я могу это сделать? Я сделал аналогичные вещи, чтобы определить «размер» матрицы перехода, как показано ниже, но я не знаю, как разрешить оператору двоеточия функционировать, как хотелось бы. Спасибо!

function Base.size(T :: TransitionMatrix, dim) 
    return size(T.A, dim) 
end 
+0

Рассмотрите возможность принятия ответа Толи. – Jubobs

ответ

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) 

Затем

julia> A[:,2:3] 
(indx1,indx2) = (1:5,2:3) 
(1:5,2:3) 

Анализатор расширяет : в 1:size(A,d).