From: nobu@... Date: 2015-04-24T06:18:10+00:00 Subject: [ruby-core:68979] [Ruby trunk - Bug #11027] Named Argument assignment from Hash failure Issue #11027 has been updated by Nobuyoshi Nakada. Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: REQUIRED to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: REQUIRED ---------------------------------------- Bug #11027: Named Argument assignment from Hash failure https://bugs.ruby-lang.org/issues/11027#change-52233 * Author: Alan Gano * Status: Closed * Priority: Normal * Assignee: Koichi Sasada * ruby -v: ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux] * Backport: 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: REQUIRED ---------------------------------------- I am call a method, which has named arguments, a Hash, which then as expected, maps the keys of the Hash to the argument names. I boiled down a problem scenario wherein it fails to do this. In the code below the argument i_field2 of the ack() method, is failing to be set from the Hash. It gets set to nil. This also occurs in 2.2.0p0. ~~~ruby require 'base64' def ack(i_field1:,i_field2:,**i_others) puts '-'*79 puts i_field1.inspect puts ">>> #{i_field2.inspect} <<< SHOULD be 'field2'" puts i_others.inspect end # create the marshaled hash in another execution #t_args = {i_field1:"field1",i_field2:"field2",something:"something"} #puts Base64.strict_encode64(Marshal.dump(t_args)) #exit t_marshal = 'BAh7CDoNaV9maWVsZDFJIgtmaWVsZDEGOgZFVDoNaV9maWVsZDJJIgtmaWVsZDIGOwZUOg5zb21ldGhpbmdJIg5zb21ldGhpbmcGOwZU' t_args = Marshal.load(Base64.strict_decode64(t_marshal)) puts t_args.inspect # => {:i_field1=>"field1", :i_field2=>"field2", :something=>"something"} ack(t_args) #_ = { something:'?' } # makes it work #_ = { :something => '?' } # makes it work #_ = :something # makes it work ~~~ -- https://bugs.ruby-lang.org/