From: samuel@... Date: 2017-03-02T01:14:03+00:00 Subject: [ruby-core:79850] [Ruby trunk Bug#12834] `prepend` getting prepended even if it already exists in the ancestors chain Issue #12834 has been updated by Samuel Williams. I feel like this is a bug, and should be fixed. Prepending the same thing multiple times should be a warning IMHO. I'm not even sure what situation this is useful. ``` 2.4.0 :001 > module M 2.4.0 :002?> end => nil 2.4.0 :003 > module N 2.4.0 :004?> end => nil 2.4.0 :005 > class C 2.4.0 :006?> prepend M, N, M 2.4.0 :007?> end => C 2.4.0 :008 > C.included_modules => [N, M, Kernel] 2.4.0 :009 > D = C.dup.prepend(M) => D 2.4.0 :010 > D.included_modules => [N, M, Kernel] 2.4.0 :011 > class E < D 2.4.0 :012?> prepend M 2.4.0 :013?> end => E 2.4.0 :014 > E.included_modules => [M, N, M, Kernel] 2.4.0 :015 > ``` ---------------------------------------- Bug #12834: `prepend` getting prepended even if it already exists in the ancestors chain https://bugs.ruby-lang.org/issues/12834#change-63283 * Author: Nikola Nenkov * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.3.1 * Backport: 2.3: UNKNOWN ---------------------------------------- ``` module M; end class A; prepend M; end class B < A; prepend M; end B.ancestors # => [M, B, M, A, Object, Kernel, BasicObject] ``` Even though I find this behaviour to be more intuitive, it is inconsistent with `Module#include` and is potentially breaking. I didn't see a mention on the [[release notes]](https://www.ruby-lang.org/en/news/2015/12/25/ruby-2-3-0-released/) and the [[documentation]](https://ruby-doc.org/core-2.3.1/Module.html#method-i-prepend_features) is now outdated. -- https://bugs.ruby-lang.org/ Unsubscribe: