Bug #11970
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
# Segfaults in 2.2.3 and 2.3.0, In 2.1.0 and below, produces `{[:foo]=>:bar}` {[:foo]=>:bar} ~~~ruby foo = [:foo] bar = [:bar] h = {} h[*foo], _tail = *bar # Segfault ~~~ # Using hash assignment/destructuring in this way may very well be undefined. I am surprised that the hash key `h[*foo]` h[*foo] destructures in later examples, but I'm not really sure what the behavior should be. A number of similar constructs # produce consistent behavior, which leads me to believe the above syntax should work (or at least not segfault). # Below examples produce the same output in ruby 1.9.3, 2.1.0, 2.2.3, and 2.3.0 ~~~ruby h = {} h[:foo], _tail = *bar puts h # => {:foo => :bar} h = {} h[foo[0]], _tail = *bar puts h # => {:foo => :bar} h = {} h[*foo] = :bar puts h # => {:foo => :bar} ~~~ # Rubies Tested: ~~~ # ruby 1.9.3p550 (2014-10-27 revision 48165) [x86_64-linux] # ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux] # ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux] # ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] ~~~