# Come aggiungere un metodo alla classe String?

**URL:** <https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437>\
**Category:** IT\
**Created:** [November 17, 2008, 8:20am UTC](https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437 "2008-11-17T08:20:16Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![sdpurtill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/77aa72/32.png) [@sdpurtill](https://www.ruby-forum.com/u/sdpurtill)\
**Post date:** [November 17, 2008, 8:20am UTC](https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437/1 "2008-11-17T08:20:16Z")

</div>

Salve a tutti

Vorrei aggiungere un metodo “mio\_metodo” alla classe String, in modo da  
poter fare qualcosa tipo:

str = “Mia Stringa”.mio\_metodo

PerciÃ² nel controller ho messo:

class String  
def mio\_metodo

end  
end

Ma non funziona.

Come si fa?

Grazie a tutti.

---

<div class="post-metadata">

**Author:** ![sdpurtill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/77aa72/32.png) [@sdpurtill](https://www.ruby-forum.com/u/sdpurtill)\
**Post date:** [November 17, 2008, 9:01am UTC](https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437/2 "2008-11-17T09:01:27Z")

</div>

On Mon, Nov 17, 2008 at 8:20 AM, Sam P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Salve a tutti
> 
> Vorrei aggiungere un metodo “mio\_metodo” alla classe String, in modo da  
> poter fare qualcosa tipo:

[…]

> Ma non funziona.
> 
> Come si fa?

devi ‘riaprire’ la classe. Dai un’occhiata a questo:

> **[Reopening Ruby Classes](http://juixe.com/techknow/index.php/2007/01/17/reopening-ruby-classes-2/)**
>
> In Ruby the implementation of a class is not closed. In Ruby, it is incredibly easy to add new methods to any existing class at runtime, even core system classes like String, Array, and Fixum. You …

michele.

---

<div class="post-metadata">

**Author:** ![sdpurtill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/77aa72/32.png) [@sdpurtill](https://www.ruby-forum.com/u/sdpurtill)\
**Post date:** [November 17, 2008, 6:59pm UTC](https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437/3 "2008-11-17T18:59:54Z")

</div>

Sam P. wrote:

> Salve a tutti
> 
> Vorrei aggiungere un metodo “mio\_metodo” alla classe String, in modo da  
> poter fare qualcosa tipo:
> 
> str = “Mia Stringa”.mio\_metodo
> 
> PerciÃ² nel controller ho messo:

nel controller? Quindi vuoi farlo in Ruby on Rails… sarebbe stato  
meglio specificarlo 😉

> class String  
> def mio\_metodo
> 
> end  
> end
> 
> Ma non funziona.
> 
> Come si fa?

prova ad inserirlo nel file environment.rb (andrebbe messo in una  
libreria, ma cosÃ¬ Ã¨ il modo piÃ¹ semplice)

> Grazie a tutti.

Prego  
Duilio R.

---

<div class="post-metadata">

**Author:** ![sdpurtill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/77aa72/32.png) [@sdpurtill](https://www.ruby-forum.com/u/sdpurtill)\
**Post date:** [November 17, 2008, 7:25pm UTC](https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437/4 "2008-11-17T19:25:42Z")

</div>

Duilio R. wrote:  
-cut-

> nel controller? Quindi vuoi farlo in Ruby on Rails… sarebbe stato  
> meglio specificarlo 😉  
> -cut-  
> prova ad inserirlo nel file environment.rb (andrebbe messo in una  
> libreria, ma cosÃ¬ Ã¨ il modo piÃ¹ semplice)

Non ho capito bene…

Forse vuoi dire che avendolo messo solo nel controller non funziona in  
tutto il progetto?

Si, sono d’accordo, ma potrei metterlo nel controller application, no?

Grazie

---

<div class="post-metadata">

**Author:** ![sdpurtill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/77aa72/32.png) [@sdpurtill](https://www.ruby-forum.com/u/sdpurtill)\
**Post date:** [November 17, 2008, 9:05pm UTC](https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437/5 "2008-11-17T21:05:51Z")

</div>

2008/11/17 Sam P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Duilio R. wrote:
> 
> > prova ad inserirlo nel file environment.rb (andrebbe messo in una  
> > libreria, ma così è il modo più semplice)
> 
> Non ho capito bene…
> 
> Forse vuoi dire che avendolo messo solo nel controller non funziona in  
> tutto il progetto?
> 
> Si, sono d’accordo, ma potrei metterlo nel controller application, no?

se vuoi che sia disponibile ovunque, cioè controller, model, etc.,  
allora devi metterlo nella configurazione di rails.

io di solito piazzo queste cose in /lib, dopo di che in  
environments.rb faccio require ‘il\_mio\_file’.

---

<div class="post-metadata">

**Author:** ![sdpurtill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/77aa72/32.png) [@sdpurtill](https://www.ruby-forum.com/u/sdpurtill)\
**Post date:** [November 17, 2008, 7:23pm UTC](https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437/6 "2008-11-17T19:23:15Z")

</div>

Michele F. wrote:  
-cut-

> devi ‘riaprire’ la classe. Dai un’occhiata a questo:  
> [http://www.juixe.com/techknow/index.php/2007/01/17/reopening-ruby-classes-2/](http://www.juixe.com/techknow/index.php/2007/01/17/reopening-ruby-classes-2/)
> 
> michele.

OK, funziona, grazie!

Nel controller ho messo:

String.class\_eval do  
def mio\_metodo  
…  
end  
end

---

<div class="post-metadata">

**Author:** ![sdpurtill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/77aa72/32.png) [@sdpurtill](https://www.ruby-forum.com/u/sdpurtill)\
**Post date:** [November 17, 2008, 11:57pm UTC](https://www.ruby-forum.com/t/come-aggiungere-un-metodo-alla-classe-string/153437/7 "2008-11-17T23:57:27Z")

</div>

lib/core\_ext/string.rb  
class String  
def method  
# implementation here  
end  
end

config/initializers/core\_ext.rb  
Dir["#{RAILS\_ROOT}/lib/core\_ext/\*.rb"].each {|file| require file}

Luca
