From: Anthony Crumley Date: 2015-01-24T04:47:32+00:00 Subject: [ruby-core:67785] Change in hash key values between 2.1 and 2.2 --001a1134f03c77671f050d5e9a55 Content-Type: text/plain; charset=UTF-8 This RubySpec specification reveals a difference between how 2.1 and 2.2 handles ** applied to a variable in a hash. The 2.2 behavior seems to be more consistent but was this change a regression or was it intentional? https://github.com/anthonycrumley/rubyspec/blob/master/language/hash_spec.rb#L92-L97 Hash literal calls #to_hash to convert an '**obj' element FAILED Expected {:a=>2, :b=>3, :c=>3} to equal {:a=>1, :b=>3, :c=>3} /vagrant/spec/rubyspec/language/hash_spec.rb:96:in `block (2 levels) in ' /vagrant/spec/rubyspec/language/hash_spec.rb:3:in `' Below are examples of the same behavior in irb. 2.1.5 :001 > h = {a: 1} => {:a=>1} 2.1.5 :002 > {a: 2, **h} => {:a=>2} 2.1.5 :003 > {a: 2, **h, a: 3} => {:a=>3} 2.1.5 :004 > {**h, a: 3} => {:a=>3} 2.1.5 :005 > {a: 2, a: 3} => {:a=>3} 2.2.0 :001 > h = {a: 1} => {:a=>1} 2.2.0 :002 > {a: 2, **h} => {:a=>1} 2.2.0 :003 > {a: 2, **h, a: 3} => {:a=>3} 2.2.0 :004 > {**h, a: 3} => {:a=>3} 2.2.0 :005 > {a: 2, a: 3} (irb):1: warning: duplicated key at line 1 ignored: :a => {:a=>3} --001a1134f03c77671f050d5e9a55 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
This RubySpec specification reveals a difference between how 2.1 = and 2.2 handles ** applied to a variable in a hash.=C2=A0 The 2.2 behavior = seems to be more consistent but was this change a regression or was it inte= ntional?

https://github.com/= anthonycrumley/rubyspec/blob/master/language/hash_spec.rb#L92-L97

Hash literal calls #to_hash to convert an '= ;**obj' element FAILED
Expected {:a=3D>2, :b=3D>3, :c= =3D>3}
=C2=A0to equal {:a=3D>1, :b=3D>3, :c=3D>3}

/vagrant/spec/rubyspec/language/hash_spec.rb:96:in `b= lock (2 levels) in <top (required)>'
/vagrant/spec/ruby= spec/language/hash_spec.rb:3:in `<top (required)>'

Below are examples of the same behavior in irb.
=
2.1.5 :001 > h =3D {a: 1}
=C2=A0=3D> {:a=3D&= gt;1}=C2=A0
2.1.5 :002 > {a: 2, **h}
=C2=A0=3D> {= :a=3D>2}=C2=A0
2.1.5 :003 > {a: 2, **h, a: 3}
=C2= =A0=3D> {:a=3D>3}=C2=A0
2.1.5 :004 > {**h, a: 3}
=C2=A0=3D> {:a=3D>3}=C2=A0
2.1.5 :005 > {a= : 2, a: 3}
=C2=A0=3D> {:a=3D>3}=C2=A0

<= /div>
2.2.0 :001 > h =3D {a: 1}
=C2=A0=3D> {:a=3D>1}= =C2=A0
2.2.0 :002 > {a: 2, **h}
=C2=A0=3D> {:= a=3D>1}=C2=A0
2.2.0 :003 > {a: 2, **h, a: 3}
=C2= =A0=3D> {:a=3D>3}=C2=A0
2.2.0 :004 > {**h, a: 3}
=C2=A0=3D> {:a=3D>3}=C2=A0
2.2.0 :005 > {a: 2, a= : 3}
(irb):1: warning: duplicated key at line 1 ignored: :a
=
=C2=A0=3D> {:a=3D>3}=C2=A0

--001a1134f03c77671f050d5e9a55--