Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

explains why AS::OrderedHash does not leverage inheritance

  • Loading branch information...
commit 50df162a2b6dea873542d2c4fd055a0e40dad5cc 1 parent e574ca9
@fxn fxn authored
Showing with 11 additions and 0 deletions.
  1. +11 −0 activesupport/lib/active_support/ordered_hash.rb
View
11 activesupport/lib/active_support/ordered_hash.rb
@@ -23,6 +23,17 @@ def to_yaml(opts = {})
# Hash is ordered in Ruby 1.9!
if RUBY_VERSION < '1.9'
+
+ # 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.
+
def initialize(*args, &block)
super
@keys = []
Please sign in to comment.
Something went wrong with that request. Please try again.