## Feature #10445

### [PATCH 3/3] Extend Matrix#[]

**Description**

I've made patches which Matrix#[] returns new vector if either arguments is range,

and returns new matrix, if both arguments are range.

Like below.

```
# matrix[row, column] -> obj or nil
# matrix[row, col_range] -> new_vector or nil
# matrix[row_range, column] -> new_vector or nil
# matrix[row_range, col_range] -> new_matrix or nil
Matrix.diagonal(9, 5, -3)[1, 1]
=> 5
Matrix.diagonal(9, 5, -3)[1, 0..1]
=> Vector[0, 5]
Matrix.diagonal(9, 5, -3)[0..1, 0]
=> Vector[9, 0]
Matrix.diagonal(9, 5, -3)[0..1, 0..1]
=> Matrix[[9, 0], [0, 5]]
```

I'm not sure `matrix[row, col_range]`

should return `vector`

or `matrix`

But from my view, it's fine.

I'm not in a hurry. Take your time.

**Files**

#### Updated by marcandre (Marc-Andre Lafortune) over 5 years ago

**Status**changed from*Open*to*Feedback*

I understand the idea, but I'm not convinced.

Currently, [] is a simple access to the elements of a matrix. This proposal makes it more complex and changes completely the type of return depending on the arguments. The main question is: when would someone want to extract a minor from a matrix and much prefer calling `[]`

instead of the clearer and explicit `minor`

?

I feel like we should favor explicitness in this case.

#### Updated by gogotanaka (Kazuki Tanaka) over 5 years ago

@Marc-Andre Lafortune

Thank you for reply.

OK, the answer is when we expect `Matrix`

to behave something like `Array`

, I mean..

```
[1,2,3,4][1..2]
#=> [2,3]
Matrix[[1,2,3],[4,5,6],[7,8,9]][0..1, 0..1]
#=> Matrix[[1,2], [4,5]]
```

Actually I am also one of people who expect such a behavior.

Thanks.