[ruby-core:121395] [Ruby Feature#21190] Proposal for the Deconstruct Method in the MatchData Class
From:
"jeremyevans0 (Jeremy Evans) via ruby-core" <ruby-core@...>
Date:
2025-03-18 05:32:15 UTC
List:
ruby-core #121395
Issue #21190 has been updated by jeremyevans0 (Jeremy Evans).
You can implement this more easily using named captures:
```ruby
/(?<country_code>\d{2})(?<area_code>\d{2})(?<number>\d{9})/ =3D~ "558698765=
4321"
country_code # =3D> "55"
area_code # =3D> "86"
number # =3D> "987654321"
```
I think proper use of named captures should handle most cases where you wou=
ld want to use the proposed `MatchData#deconstruct`. The remaining cases w=
ould be when you are passing MatchData as an argument to or result of a met=
hod call.
If we did want to implement this, it's questionable to me whether `MatchDat=
a#deconstruct` should operate like `MatchData#to_a` or `MatchData#captures`=
(your example implies `captures` would be a more useful behavior for that =
use case). =20
----------------------------------------
Feature #21190: Proposal for the Deconstruct Method in the MatchData Class
https://bugs.ruby-lang.org/issues/21190#change-112365
* Author: aristotelesbr (Arist=F3teles Costa)
* Status: Open
----------------------------------------
## Context:
The MatchData class currently lacks the deconstruct method, which is necess=
ary for extracting values from a string using pattern matching in Ruby.
## Current Extraction Method
Currently, extraction can be done as follows:
```rb
result =3D /(\d{2})(\d{2})(\d{9})/.match("5586987654321")
puts result[1] # =3D> "55"
puts result[2] # =3D> "86"
puts result[3] # =3D> "987654321"
```
## Proposed Solution:
Implement the deconstruct method in the MatchData class to allow conversion=
of the MatchData object into an array, enabling deconstruction of its comp=
onents.
```rb
class MatchData
def deconstruct
self.to_a
end
end
result =3D /(\d{2})(\d{2})(\d{9})/.match("5586987654321")
result in [_ , country_code, area_code, number]
puts country_code # =3D> "55"
puts area_code # =3D> "86"
puts number # =3D> "987654321"
```
--=20
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- [email protected]
To unsubscribe send an email to [email protected]
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.rub=
y-lang.org/