Issue #14444 has been reported by zverok (Victor Shepelev).

----------------------------------------
Feature #14444: MatchData: alias for #[]
https://bugs.ruby-lang.org/issues/14444

* Author: zverok (Victor Shepelev)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
After introduction of safe navigation operator and other latest features, it could be pretty idiomatic to do this:

```ruby
next_page = response.dig('meta', 'pagination', 'next')&.match(/&page=(\d+)/)&.[](1)
```

The ugly thing here is, obviously, `&.[](1)`. When dealing with other classes we can use `dig(one_key)` or `at(index)` for arrays, but for `MatchData` there are no good synonym/alias.

Two options come to mind:

* `&.capture(1)`  singular from "captures"
* `&.at(1)`  like it is in Array, from which MatchData already borrows `values_at`

Yes, several `&.` in a row could be said a code smell and example may feel a bit extreme.

But for simple matches, the principle stays the same: "match something and extract if matched" otherwise should be written in much less readable code like this:

```ruby
if url =~ /&page=(\d+)/
  next_page = Regexp.last_match[1]
end
# or
if (m = url.match(/&page=(\d+)/))
  next_page = m[1]
end

# this seems the most reasonable syntax anyways:
next_page = url.match(/&page=(\d+)/)&.at(1)
```



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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>