Actions
Bug #12027
closedHash descendants are ignoring custom to_hash method
Description
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?
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Description updated (diff)
- Status changed from Open to Rejected
Because b.is_a?(Hash)
already.
to_hash
is the method to pretend to be a Hash
.
Actions
Like0
Like0