
Issue #20433 has been updated by mame (Yusuke Endoh). Discussed at the dev meeting. In conclusion, @matz wanted to change the return value of `Hash#inspect` significantly and estimate its compatibility impact: ```ruby { :key => 42 } #=> {key: 42} # if the key is a symbol { :== => 42 } #=> {"==": 42} # if the key is a symbol and quotes are needed { "str" => 42 } #=> {"str" => 42} # otherwise (note that `=>` is surrounded by spaces) # when keys are mixed { :== => 1, :key => 2, "str" => 3 } # {"==": 1, key: 2, "str" => 3} ``` Actually, some solutions were discussed. Solution 1: insert a space before `=>` only when needed. ```ruby { :key => 1 } # {:key=>1} { :== => 1 } # {:== =>1} { :a! => 1 } # {:a! =>1} ``` Solution 2: insert spaces before and after `=>` consistently ```ruby { :key => 1 } # {:key => 1} { :== => 1 } # {:== => 1} { :a! => 1 } # {:a! => 1} ``` Solution 3: quote keys only when needed ```ruby { :== => 1 } # {:"=="=>1} { :a! => 1 } # {:"a!"=>1} { :key => 1 } # {:key=>1} ``` Matz said he likes Solution 2. However, this has a compatibility issue. It may break some existing test assertions. Matz had had the idea of denoting symbol keys by a colon in `Hash#inspect`. And the incompatibility impacts of Solution 2 and of symbol keys by colons are expected to be about the same. Rather than introducing the incompatibilities in two steps, Matz said he wants to change it at once. ---------------------------------------- Bug #20433: Hash.inspect for some hash returns syntax invalid representation https://bugs.ruby-lang.org/issues/20433#change-108688 * Author: tompng (tomoya ishida) * Status: Open * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- For these hashes, Hash.inspect returns a syntax invalid representation: ~~~ruby { :a! => 1 } # {:a!=>1} { :a? => 1 } # {:a?=>1} { :* => 1 } # {:*=>1} { :== => 1 } # {:===>1} { :< => 1 } # {:<=>1} ~~~ `eval(hash.inspect)` will raise SyntaxError. Although inspect does not guarantee that the result can be eval-ed, it'd be confusing for these few cases. Maybe related to https://bugs.ruby-lang.org/issues/20235 -- https://bugs.ruby-lang.org/