From: foonlyboy@... Date: 2018-09-25T00:53:06+00:00 Subject: [ruby-core:89150] [Ruby trunk Feature#15149] extend string format to nil safe Issue #15149 has been updated by foonlyboy (Eike Dierks). Hi nobu, thanks for your reply, let's talk about this I believe that %p is for pointers. Actually %p already behaves like this: '%p' % nil => "nil" (I was not aware of that) Please explain your complaints about compatibility. This is a new feature Obviously libraries which want to support earlier versions can not use that new feature. But adding this new feature would not break *any* existing code. (show me code that breaks on this) I believe this is ruby style: make things easy --- We could go down the road of printf formats, and a lot of programs failed on NULL in printf Once we have this in ruby, it might even spread out to C++ I still do opt for displaying nil as 'nil' (not the empty string) I should look this up in the standards for the %p conversion ~eike ---------------------------------------- Feature #15149: extend string format to nil safe https://bugs.ruby-lang.org/issues/15149#change-74184 * 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: