From: "Haase, Konstantin" Date: 2012-01-29T18:39:36+09:00 Subject: [ruby-core:42254] Re: [ruby-trunk - Bug #5940][Open] Resolve conflict between inheritance and mixins What you want is a feature planned for Ruby 2.0 called Module#prepend (as compared to Module#include). Konstantin On Jan 28, 2012, at 00:53 , Mario Lanza wrote: > > Issue #5940 has been reported by Mario Lanza. > > ---------------------------------------- > Bug #5940: Resolve conflict between inheritance and mixins > https://bugs.ruby-lang.org/issues/5940 > > Author: Mario Lanza > Status: Open > Priority: Normal > Assignee: > Category: > Target version: > ruby -v: 1.9.2 > > > Some in the Ruby community (like Chad Fowler) have noticed issues around how Ruby attempts to transverse a method's pipeline up the inheritance chain. When you inherit a class from another class and then add a mixin, the mixin is not able to supercede the methods defined in the inherited-from class. > > I've demonstrated the issue here: > https://gist.github.com/515856 > > It would be nice if Ruby were to change its default inheritance behavior so that mixin do override a class's methods. Essentially, the behavior would treat inheritance in nearly the same manner that it treats mixins. > > class Person < ActiveRecord::Base > end > > would be effectively treated, in a manner of speaking, as: > > class Person > include ActiveRecord::Base > end > > (I would go so far as to say that we get rid of direct inheritance in favor of always using mixins to accomplish our inheritance goals. I do have a reservation for how this would affect backwards compatibility.) > > I dunno if Ruby's current behavior is intentional (having purposeful benefits) but I find it annoying as it makes it difficult to override a behavior in third-party libraries. When I own the classes, I can simply refactor them to prefer mixins as to avoid this issue, but this doesn't solve the dilemma when dealing with vendor libraries. > > > -- > http://bugs.ruby-lang.org/ >