Project

General

Profile

Bug #12821

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

Hi, 

 I saw a bit strange behavior (at least for me) with the code below; an object given as an argument to a method with a default value and a keyword argument becomes `Hash` Hash class if the object has '`to_hash`' 'to_hash' method with ruby >= 2.2, but it is not converted to `Hash` Hash with ruby 2.1. 
 I expected the behavior of ruby 2.1. 
 Is this a bug or expected behavior of ruby >= 2.2? 

 I tested both on Linux x86_64 (CentOS 6) and Mac OS X 10.11.6. 

 ~~~ ruby 
 class Test1 
 end 

 class Test2 
   def to_hash 
     {0 => [0, 1]} 
   end 
 end 

 def argtest1 foo, bar: nil 
   p foo.class 
 end 

 def argtest2 foo = nil, bar: nil 
   p foo.class 
 end 

 test1 = Test1.new 
 test2 = Test2.new 

 argtest1(test1) # => Test1 
 argtest1(test2) # => Test2 

 argtest2(test1) # => Test1 
 argtest2(test2) # => Hash (2.2.5p319, 2.3.1p112, 2.4.0-preview2), Test2 (2.1.10p492) 
 

 ~~~ 

 Regards, 
 Hiroyuki Tanaka

Back