Issue #13016 has been updated by Shyouhei Urabe.

Status changed from Feedback to Rejected

We looked at this issue in yesterday's developer meeting.

While I claimed the use of regular expression is an implementation detail that I don't want to care about, attendees there said it is better to expose compiled structure (be they regexp) for performance.  I agree with that, so I give up this propossal.

One note however: for instance if you have a table `h = { 'a' => 'x', 'ab' => 'xy'}`, You have to carefully avoid generating `gsub(/a|ab/, h)`.  This regexp would never match ab.  You have to sort the hash key by its length before feeding to Regexp.union.

----------------------------------------
Feature #13016: String#gsub(hash)
https://bugs.ruby-lang.org/issues/13016#change-62599

* Author: Shyouhei Urabe
* Status: Rejected
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
Background: I wanted to drop NKF dependency of my script.  By doing so I noticed that I can't purge `NKF.nkf '-Z4'`.  It can neither be rewritten using String#tr, String#encode, nor String#unicode_normalize. It is doable using String#gsub theoretically, but that requires a hand-crafted nontrivial regular expression that exactly matches what Z4 expects to convert.  This is almost impossible to do, and is definitely not something debuggable.

Proposal: extend String#gsub so that it also accepts hash as its only argument, specifying input-output mapping.

```ruby
# now
def convert str
  require 'nkf'
  NKF.nkf '-Z4xm0', str
end

# proposed
def convert str
  map = {  "\u3002" => "\uFF61", "\u300C" => "\uFF62", ... }
  str.gsub map
end
```



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