Issue #10445 has been updated by gogo tanaka.


@Marc-Andre Lafortune

Thank you for reply.
 
OK, the answer is when we expect `Matrix` to behave something like `Array`, I mean..

```ruby
[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.

----------------------------------------
Feature #10445: [PATCH 3/3] Extend Matrix#[]
https://bugs.ruby-lang.org/issues/10445#change-50027

* Author: gogo tanaka
* Status: Feedback
* Priority: Normal
* Assignee: Marc-Andre Lafortune
* Category: lib
* Target version: 
----------------------------------------
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.

```ruby
# 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--------------------------------
add_test.patch (1.05 KB)
implement_matrix.rb.patch (1.96 KB)
update_NEWS.patch (825 Bytes)


-- 
https://bugs.ruby-lang.org/