# Namespace collision

**URL:** <https://www.ruby-forum.com/t/namespace-collision/198865>\
**Category:** IT\
**Created:** [November 9, 2010, 5:02pm UTC](https://www.ruby-forum.com/t/namespace-collision/198865 "2010-11-09T17:02:33Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![okkezSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/85f322/32.png) [@okkezSS](https://www.ruby-forum.com/u/okkezSS)\
**Post date:** [November 9, 2010, 5:02pm UTC](https://www.ruby-forum.com/t/namespace-collision/198865/1 "2010-11-09T17:02:33Z")

</div>

Ciao ragazzi,

facendo le mie prime prove in Ruby mi è venuto in mente di scrivere una  
versione di detect diversa da quella di Enumerable:

module Extention1

def detect()  
res\_array = []  
if ( self.respond\_to?(“each”) )  
self.each do  
|element|  
res = yield(element)  
if( res ==true )  
res\_array.push(element)  
end  
end  
return res\_array  
else return nil  
end

end  
end

poi per inclusione in Array:

class Array

```
    include Extention1

```

end

array\_result = [1,2,3].detect(){…}

a questo punto, come faccio a far convivere le due versioni di detect,  
cioè la mia e quella che Array include da Enumerable?

---

<div class="post-metadata">

**Author:** ![vogon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@vogon](https://www.ruby-forum.com/u/vogon)\
**Post date:** [November 9, 2010, 5:19pm UTC](https://www.ruby-forum.com/t/namespace-collision/198865/2 "2010-11-09T17:19:40Z")

</div>

per fare quello che chiedi, ti basta creare un alias per il vecchio  
_detect_ prima di sovrascriverlo:

class Array  
alias old\_detect detect # creo l’alias

```
 include Extention1 # poi lo sovrascrivo

```

end

a questo punto se hai bisogno dell’originale, potrai chiamarlo con  
old\_detect

capisco che stai facendo degli esperimenti didattici, tuttavia tieni  
presente che sovrascrivere il metodo di una classe cos importante  
potrebbe portare a strani comportamenti difficili da individuare e  
correggere. in ogni caso, puoi ottenere lo stesso risultato (evitando i  
pericoli descritti) semplicemente creando una classe ad-hoc che _si  
comporta come un array_ ed inserendo/sovrascrivendo i metodi che ti  
occorrono 😉

prova a leggere questo paio di articoli:

> **[Duck Typing, tipizzazione per comportamenti](https://www.html.it/articoli/duck-typing-tipizzazione-per-comportamenti/)**
>
> Riconoscere un oggetto non dal tipo ma dai metodi che espone, quindi dal suo "comportamento"

> **[Learn How to Blog and Build Websites for Profit!](https://heyblogging.com)**
>
> Ready to take your blogging skills to the next level? Learn how to build a website that generates income and sets you up for success.

ciao,  
A.

Il 09/11/2010 17:02, Vogon P. ha scritto:

---

<div class="post-metadata">

**Author:** ![vogon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@vogon](https://www.ruby-forum.com/u/vogon)\
**Post date:** [November 10, 2010, 10:13am UTC](https://www.ruby-forum.com/t/namespace-collision/198865/3 "2010-11-10T10:13:15Z")

</div>

oppure aggiungendo un metodo che si chiami “new\_detect” invece che  
sovrascrivere il vecchio
