Exceptions differentiated by the length of an array

Hello everyone, I wanted to ask a question.
I am currently getting an array of doubles containing matrix = [magnitudes ; angles] where
I have different cases (separated by spaces and “;”):

case 1: [X1 X2; angle_x1 angle_x2] … [2x2]
case 2: [X1 Y1 X2 Y2; angle_x1 angle_y1 angle_x2 angle_y2] … [2x4]
case 3: [X1 Y1 Z1 X2 Y2 Z2; angle_x1 angle_y1 angle_z1 angle_x2 angle_y2 angle_z2] … [2x6]

I would like to be able to make exceptions according to the size of my array (or according to its number of columns) to retrieve information, for example if I have case 1 where the size of the matrix is M1, I only retrieve X1, if case 2 where my matrix is of size M2 get X1 and Y2, if case 3 where the size of the matrix is M3 get x1 y1 z1.

thx to all.

just use if-else, naively Matrix all have the same type information (unless you do some hackery to propagate this information but it’s probably not worth it)

Hello! Can you give me an example?

function magnitudes(matrix)
    size(matrix, 2) == 2 && return matrix[1, 1]
    size(matrix, 2) == 4 && return matrix[1, [1, 4]]
    size(matrix, 2) == 6 && return matrix[1, 1:3]
    error("Expected matrix of width 2, 4 or 6, got $(size(matrix, 2))")
end
1 Like

You might want to have these cases as different types, and then dispatch on the appropriate type.
For example in this case, explicit types for 1D 2D or 3D, or a single type parametrized by D, as in Point{D}.
This could pay for itself in future with efficiency when this D is known at compile type.

2 Likes