Project

General

Profile

Actions

Bug #12821

closed

Object converted to Hash unexpectedly under certain method call

Added by tanahiro (Hiroyuki Tanaka) about 5 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
2.2.5p319, 2.3.1p112, 2.4.0-preview2
Backport:
[ruby-core:77527]

Description

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 class if the object has 'to_hash' method with ruby >= 2.2, but it is not converted to 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.

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


Related issues

Related to Ruby master - Feature #14183: "Real" keyword argumentClosedActions
Has duplicate Ruby master - Bug #12884: Using a HashWithIndifferentAccess with a default value in a function with a keyword parameter converts it to a Hash.ClosedActions
Actions

Also available in: Atom PDF