From: hanmac@...
Date: 2016-01-20T06:18:45+00:00
Subject: [ruby-core:72963] [Ruby trunk - Feature #11999] MatchData#to_h to get a Hash from named captures

Issue #11999 has been updated by Hans Mackowiak.


@Shota: i do need to test your patch, but my case is a little bit different than yours.
because it can be nil, it seems to pick the first non-nil value in my case. (or is it the last non-nil?)


specially with your patch:

```ruby
reg = /(?<a>b)|(?<a>x)/ # => /(?<a>b)|(?<a>x)/ 
reg.match("abc") # => #<MatchData "b" a:"b" a:nil>
reg.match("abc").to_h #=> {"a" => "b"} or {"a" => nil}
```

----------------------------------------
Feature #11999: MatchData#to_h to get a Hash from named captures
https://bugs.ruby-lang.org/issues/11999#change-56185

* Author: Shota Fukumori
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
~~~
class MatchData
  def to_h
    self.names.map { |n| [n, self[n]] }.to_h
  end
end

p '12'.match(/(?<a>.)(?<b>.)(?<c>.)?/).to_h #=> {"a"=>"1", "b"=>"2", "c"=>nil}
~~~

Sometimes I want to get a Hash from named capture, but currently I have to use #names + #captures. How about adding MatchData#to_h for convenience way?



---Files--------------------------------
11999.diff (2.77 KB)


-- 
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>