Issue #15149 has been reported by foonlyboy (Eike Dierks).
----------------------------------------
Feature #15149: extend string format to nil safe
https://bugs.ruby-lang.org/issues/15149
* Author: foonlyboy (Eike Dierks)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
I'd like to suggest a new modifier for the string format
(aka the printf-style format string)
## Examples
### Current
~~~
'%s' % nil => ''
'%d' % nil => Exception: TypeError: can't convert nil into Integer
~~~
### Suggestion
~~~
'%&s' % nil => 'nil'
'%&d' % nil => 'nil'
~~~
## Explanation
I suggest to introduce a new modifier for the format strings.
(in the examples above I used the ampersand char: **&**)
That modifier should change the behaviour of string formatting in two ways:
- accept nil as an argument *for all conversion formats*
- display explicit **'nil'** when **nil** is given as an argument
## Rationale
This feature would be most helpful for log messages and printf style debugging
- currently only the %s format accepts nil, but returns an empty string.
- all other formats raise on nil
- when displaying strings, nil args show up indiscernible from empty strings
- when displaying anything else (like %d, %f etc) things just break
## Compatibility
I believe that this new feature would be fully compatible with any existing code.
Up to now the ampersand was not allowed as a modifier and results in an Exception:
~~~
'%&d' % nil => ArgumentError: malformed format string - %&
~~~
As far as I know, the ampersand has not been used in other variations of printf, yet.
## Design
I suggest to use the **&** (ampersand) because that would be in line with the ruby nil safe operator.
I opt for *explicitly* showing 'nil' for nil args (instead of the empty string)
--
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>