From: "rosenfeld (Rodrigo Rosenfeld Rosas)" Date: 2013-02-07T23:39:36+09:00 Subject: [ruby-core:51985] [ruby-trunk - Feature #7797] Hash should be renamed to StrictHash and a new Hash should be created to behave like AS HashWithIndifferentAccess Issue #7797 has been updated by rosenfeld (Rodrigo Rosenfeld Rosas). Thomas, the reason I didn't suggest your approach is because it wouldn't really fix several use cases, such as the example pointed out in the description using the json gem. It will use rb_hash_new for instance: https://github.com/flori/json/blob/master/ext/json/ext/parser/parser.c#L112 ---------------------------------------- Feature #7797: Hash should be renamed to StrictHash and a new Hash should be created to behave like AS HashWithIndifferentAccess https://bugs.ruby-lang.org/issues/7797#change-35992 Author: rosenfeld (Rodrigo Rosenfeld Rosas) Status: Open Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: Next Major Since #7792 has been rejected (although I don't really understand the reason except people being afraid of changing I guess) I'd like to propose an alternative solution to most of the problems caused by the differences between symbols and strings. From my previous experience, most of the time I'm accessing a hash, I'd prefer that it behaved like HashWithIndifferentAccess (HWIA from now) from active_support gem. Transforming all possible hashes in some object to HWIA is not only boring to do code but also time consuming. Instead, I propose that {}.class == Hash, with Hash being implemented as HWIA and the current Hash implementation renamed to StrictHash. That way, this should work: a = {a: 1, 'b' => 2} a[:a] == a['a'] && a['b'] == a[:b] I don't really see any real use case where people really want to have a hash like this: h = {a: 1, 'a' => 2} This would only confuse people. It also avoids confusion when parsing/unparsing from popular serialization formats, like JSON: currently: h = {a: 1} j = JSON.unparse h h2 = JSON.parse j h[:a] != h2[:a] With the new proposition (I'm assuming JSON should use Hash instead of StrictHash when parsing) h[:a] == h2[:a]. This is just a small example but most real-world usage for hashes would benefit from regular hashes behaving like HWIA. -- http://bugs.ruby-lang.org/