From: nobu@... Date: 2018-09-25T03:22:56+00:00 Subject: [ruby-core:89152] [Ruby trunk Feature#15149] extend string format to nil safe Issue #15149 has been updated by nobu (Nobuyoshi Nakada). foonlyboy (Eike Dierks) wrote: > I believe that `%p` is for pointers. It's true in C, but Ruby does not show bare pointers. `%p` calls `inspect` instead. > 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 meant that such library would need to stick the old behavior or branch by the version or runtime checking. ---------------------------------------- Feature #15149: extend string format to nil safe https://bugs.ruby-lang.org/issues/15149#change-74185 * 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: