Project

General

Profile

Bug #11027

Updated by nobu (Nobuyoshi Nakada) about 9 years ago

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 
 ~~~ 

 --------------------------------------------------------- 

Back