Libraries that want to support versions of Ruby before 2.3(?) can”Ētuse the safe navigation operator, either. I”Ēm aware that those versions areno longer supported, but regardless of the utility of `'%&”Ä'` as a format, that”Ēs not a great argument against it. I”Ēm mostly neutral on the concept for positional format arguments, extremely negative on the proposed result (it should be *either* a blank string or a change of the format function from `Integer(z)` to `z.to_i`, for example). I think that there”Ēs a better argument for this with named formatting: ```ruby '%&{cost}' % Hash.new # => "", as %{cost} is equivalent to %<cost>s. '%&0.2<cost>f' % Hash.new # => "0.00" ``` This, especially if the `%&` formats were implemented as calling `#to_i`, `#to_f`, `#to_s`, etc. on `nil` would make format more resilient to externally-provided content. -a On Sun, Sep 23, 2018 at 10:47 PM <nobu / ruby-lang.org> wrote: > Issue #15149 has been updated by nobu (Nobuyoshi Nakada). > > > Rather it feels the role of `inspect`, that is used by `%p`. > Regarding the compatibility, that new format string can't work with > earlier versions. > That means libraries which want to support earlier versions can't use it. > > ---------------------------------------- > Feature #15149: extend string format to nil safe > https://bugs.ruby-lang.org/issues/15149#change-74174 > > * 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> > -- Austin Ziegler halostatue / gmail.com austin / halostatue.ca http://www.halostatue.ca/ http://twitter.com/halostatue (supressed text/html) Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>