# Capire da quale metodo e' chiamato un metodo

**URL:** <https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389>\
**Category:** IT\
**Created:** [May 17, 2007, 1:47pm UTC](https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389 "2007-05-17T13:47:07Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 17, 2007, 1:47pm UTC](https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389/1 "2007-05-17T13:47:07Z")

</div>

Ho i metodi:  
def inserisci  
sendMail  
end

def elimina  
sendMail  
end

ecc…

def sendMail

end

sendMail deve eseguire delle operazioni differenti a seconda che venga  
chiamata da inserisci o da elimina o da altri metodi.  
Come e’ possibile determinare cio’?

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 17, 2007, 2:05pm UTC](https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389/2 "2007-05-17T14:05:09Z")

</div>

On 5/17/07, Mauro S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> sendMail deve eseguire delle operazioni differenti a seconda che venga  
> chiamata da inserisci o da elimina o da altri metodi.  
> Come e’ possibile determinare cio’?

passargli un parametro che gli permetta di decidere?  
forse mi devi spiegare meglio il problema, con un caso concreto

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 17, 2007, 3:55pm UTC](https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389/3 "2007-05-17T15:55:29Z")

</div>

— Mauro S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> sendMail deve eseguire delle operazioni differenti a  
> seconda che venga  
> chiamata da inserisci o da elimina o da altri  
> metodi.  
> Come e’ possibile determinare cio’?

usando Kernel::caller(), ma imo è una soluzione  
sporchina, non è meglio un approccio classico dove  
foo() chiama sendmail\_foo() e bar chiama  
sendmail\_bar()?

Oltretutto caller restituisce stringhe che dovrai  
parsare a colpi di regex, che imo è uno dei più grassi  
difetti di ruby 😕

```
  ___________________________________________________________

```

Yahoo! Answers - Got a question? Someone out there knows the answer. Try  
it  
now.

> **[Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos](https://www.yahoo.com/)**
>
> Latest news coverage, email, free stock quotes, live scores and video are just the beginning. Discover more every day at Yahoo!

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 18, 2007, 9:11am UTC](https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389/4 "2007-05-18T09:11:24Z")

</div>

Il giorno ven, 18/05/2007 alle 08.51 +0200, Mauro S. ha scritto:

> …
> 
> come determinare da quale metodo all’interno della classe e’ chiamato il  
> metodo sendMail?

Non ti conviene procedere in questa maniera. Quello che ti conviene fare  
Ã¨ creare un metodo #sendMail che contenga la logica comune ai due casi,  
poi due metodi #sendMailOnInsert e #sendMailOnDelete che contengono la  
logica specifica per i due case e si occupano di chiamare #sendMail. In  
altre parole:

def sendMail  
#…  
end

def sendMailOnInsert  
#…  
sendMail  
end

def sendMailOnDelete  
#…  
sendMail  
end

Questo modo di procedere ha il vantaggio che, se devi aggiungere una  
terza azione (ad esempio, modifica), devi solo aggiungere un metodo  
#sendMailOnUpdate senza bisogno di modificare #sendMail.

Giovanni

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 18, 2007, 8:52am UTC](https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389/5 "2007-05-18T08:52:23Z")

</div>

Il giorno gio, 17/05/2007 alle 14.03 +0200, chiaro scuro ha scritto:

> On 5/17/07, Mauro S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > sendMail deve eseguire delle operazioni differenti a seconda che venga  
> > chiamata da inserisci o da elimina o da altri metodi.  
> > Come e’ possibile determinare cio’?
> 
> passargli un parametro che gli permetta di decidere?  
> forse mi devi spiegare meglio il problema, con un caso concreto

Ho una classe con i metodi:

def inserisci  
…  
…  
sendMail  
end

def elimina  
…  
…  
sendMail  
end

ecc…

def sendMail  
se chiamata da inserisci fai: …  
se chiamata da elimina fai: …  
…  
end

come determinare da quale metodo all’interno della classe e’ chiamato il  
metodo sendMail?

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 18, 2007, 10:09am UTC](https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389/6 "2007-05-18T10:09:32Z")

</div>

> Oltretutto caller restituisce stringhe che dovrai  
> parsare a colpi di regex, che imo è uno dei più grassi  
> difetti di ruby 😕

Non me ne ero accorto… hai ragione, fa un po’ schifo:-/

–  
David N. Welton

- [David N. Welton](http://www.dedasys.com/davidw/)

Linux, Open Source Consulting

- [http://www.dedasys.com/](http://www.dedasys.com/)

---

<div class="post-metadata">

**Author:** ![sulfarom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/839c29/32.png) [@sulfarom](https://www.ruby-forum.com/u/sulfarom)\
**Post date:** [May 18, 2007, 9:55am UTC](https://www.ruby-forum.com/t/capire-da-quale-metodo-e-chiamato-un-metodo/104389/7 "2007-05-18T09:55:30Z")

</div>

> def sendMailOnInsert  
> terza azione (ad esempio, modifica), devi solo aggiungere un metodo  
> #sendMailOnUpdate senza bisogno di modificare #sendMail.

Ottimo, perfetto!! Grazie mille.
