Issue #12027 has been reported by Victor Shepelev.

----------------------------------------
Bug #12027: Hash descendants are ignoring custom to_hash method
https://bugs.ruby-lang.org/issues/12027

* Author: Victor Shepelev
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
I'm not sure it is not intended, but feels really strange:

~~~
class A
  def to_hash
    {foo: 'bar'}
  end
end

class B < Hash
  def to_hash
    {foo: 'bar'}
  end
end

a = A.new
b = B.new

p({**a}) # => {foo: 'bar'}
p({**b}) # => {} -- ooops. Seems "internal" hash state is used
# therefore:
b['test'] = 1
p({**b}) # => wrong argument type String (expected Symbol) (TypeError)
~~~

What am I missing here?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>