# Double extend of object

**URL:** <https://www.ruby-forum.com/t/double-extend-of-object/104740>\
**Category:** Ruby\
**Created:** [May 22, 2007, 12:04am UTC](https://www.ruby-forum.com/t/double-extend-of-object/104740 "2007-05-22T00:04:18Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [May 22, 2007, 12:04am UTC](https://www.ruby-forum.com/t/double-extend-of-object/104740/1 "2007-05-22T00:04:18Z")

</div>

does anyone know if this can be relied upon?

cfp:~ \> cat a.rb  
class C  
def singleton\_class &b  
sc =  
class \<\< self;  
self  
end  
b ? sc.instance\_eval(&b) : sc  
end  
def extend m  
ancestors = [singleton\_class.ancestors,  
self.class.ancestors].flatten.uniq  
super(ancestors.index(m) ? m.dup : m)  
end  
end

module A  
def foo() ‘A’ end  
end

module B  
def foo() ‘B’ end  
end

c = C.new

c.extend A  
p c.foo

c.extend B  
p c.foo

c.extend A  
p c.foo

cfp:~ \> ruby a.rb  
“A”  
“B”  
“A”

??

-a

---

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [May 22, 2007, 12:16am UTC](https://www.ruby-forum.com/t/double-extend-of-object/104740/2 "2007-05-22T00:16:31Z")

</div>

ara.t.howard wrote:

> does anyone know if this can be relied upon?

Is this the part you are really asking about?

module M; end

c = Object.new

c.extend M  
c.extend M.dup

class \<\< c; p ancestors; end

# ==\> [#Module:0xb7cf26ac, M, Object, Kernel]

---

<div class="post-metadata">

**Author:** ![ara.t.howard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a8b319/32.png) [@ara.t.howard](https://www.ruby-forum.com/u/ara.t.howard)\
**Post date:** [May 22, 2007, 12:23am UTC](https://www.ruby-forum.com/t/double-extend-of-object/104740/3 "2007-05-22T00:23:32Z")

</div>

On May 21, 2007, at 4:15 PM, Joel VanderWerf wrote:

> c.extend M.dup
> 
> class \<\< c; p ancestors; end
> 
> # ==\> [#Module:0xb7cf26ac, M, Object, Kernel]

yes 😉

-a
