Class | OrderedHash |
In: |
lib/sass/util/ordered_hash.rb
|
Parent: | ::Hash |
This class was copied from an old version of ActiveSupport.
find_all | -> | select |
In MRI the Hash class is core and written in C. In particular, methods are programmed with explicit C function calls and polymorphism is not honored.
For example, []= is crucial in this implementation to maintain the @keys array but hash.c invokes rb_hash_aset() originally. This prevents method reuse through inheritance and forces us to reimplement stuff.
For instance, we cannot use the inherited merge! because albeit the algorithm itself would work, our []= is not being called at all by the C code.
When replacing with another hash, the initial order of our keys must come from the other hash — ordered or not.