[ruby-core:93174] [Ruby trunk Feature#15927] Allow string keys to be used for String#% and sprintf methods
From:
ashmaroli@...
Date:
2019-06-16 06:46:53 UTC
List:
ruby-core #93174
Issue #15927 has been updated by ashmaroli (Ashwin Maroli).
> Can you give us some actual use case(s) where such rewriting would not be possible, or very tedious?
One use-case would be where the Data used by `sprintf` is generated at runtime:
```ruby
require 'yaml'
# contents of 'path/to/config.yml':
#
# ---
# title: Hello World
# author: John Doe
# url: "https://www.example.com/blog"
#
config = YAML.load_file('path/to/config.yml')
# config == {"title"=>"Hello World", "author"=>"John Doe", "url"=>"https://www.example.com/blog"}
# This will fail. The alternative would be to convert the string keys to symbols beforehand.
"title = %{title}" % config
[...]
```
----------------------------------------
Feature #15927: Allow string keys to be used for String#% and sprintf methods
https://bugs.ruby-lang.org/issues/15927#change-78615
* Author: luke-gru (Luke Gruber)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
Right now, in the methods sprintf() and String#%, only symbol keys can be used for named interpolation. For example (from the example documentation):
"foo = %{foo}" % { :foo => 'bar' } #=> "foo = bar"
String keys do not work like this:
"foo = %{foo}" % { 'foo' => 'bar' } #=> raises KeyError
I think string keys should work just the same as symbol keys here.
I've created a PR on github for this, perhaps misguidedly, but if can be found here: https://github.com/ruby/ruby/pull/2238
My argument for this feature is that String#gsub() and family works with string keys if given a Hash, for example:
"chocolate ice cream".gsub(/\bc/, { 'c' => 'C' }) #=> 'Chocolate ice Cream'
Also, I don't like having to symbolize keys in strings unnecessarily, but maybe that just goes back to when
Ruby couldn't GC some symbols.
--
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>