# In cosa Ruby Ã¨ prototype based?

**URL:** <https://www.ruby-forum.com/t/in-cosa-ruby-a-prototype-based/172132>\
**Category:** IT\
**Created:** [July 15, 2009, 10:52am UTC](https://www.ruby-forum.com/t/in-cosa-ruby-a-prototype-based/172132 "2009-07-15T10:52:57Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gian\_luca\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e8c25b/32.png) [@Gian\_luca\_C](https://www.ruby-forum.com/u/Gian_luca_C)\
**Post date:** [July 15, 2009, 10:52am UTC](https://www.ruby-forum.com/t/in-cosa-ruby-a-prototype-based/172132/1 "2009-07-15T10:52:57Z")

</div>

Sto girando come un pazzo per la rete ma trovo tutte informazioni  
diverse e framentate su dove Ruby sia prototype based.

Grazie per la risposta.

---

<div class="post-metadata">

**Author:** ![Gian\_luca\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e8c25b/32.png) [@Gian\_luca\_C](https://www.ruby-forum.com/u/Gian_luca_C)\
**Post date:** [July 15, 2009, 10:54am UTC](https://www.ruby-forum.com/t/in-cosa-ruby-a-prototype-based/172132/2 "2009-07-15T10:54:49Z")

</div>

Il giorno 15 Luglio 2009 10.52, Gian luca  
Colotto[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> Sto girando come un pazzo per la rete ma trovo tutte informazioni  
> diverse e framentate su dove Ruby sia prototype based.  
> a me risulta che non lo sia.  
> d’altronde o hai i prototype o hai le classi, e ruby ha le classi.

pietro

---

<div class="post-metadata">

**Author:** ![Gian\_luca\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e8c25b/32.png) [@Gian\_luca\_C](https://www.ruby-forum.com/u/Gian_luca_C)\
**Post date:** [July 15, 2009, 11:52am UTC](https://www.ruby-forum.com/t/in-cosa-ruby-a-prototype-based/172132/3 "2009-07-15T11:52:40Z")

</div>

Pietro G. wrote:

> Il giorno 15 Luglio 2009 10.52, Gian luca  
> Colotto[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:
> 
> > Sto girando come un pazzo per la rete ma trovo tutte informazioni  
> > diverse e framentate su dove Ruby sia prototype based.
> 
> a me risulta che non lo sia.  
> d’altronde o hai i prototype o hai le classi, e ruby ha le classi.

La mia affermazione era in effetti imprecisa, rifraso:

Ruby ha caratteristiche che lo rendono adatto ad essere usato come  
linguaggio prototype-based.

L’unica cosa che gli manca è il meccanismo vero e proprio di prototype,  
ma i meccanismi base ci sono; in particolare, il fatto di poter  
ridefinire o undefinire un metodo su un oggetto e non necessariamente su  
una classe.  
Peraltro tra un oggetto e una classe Ruby non c’è quasi nessuna  
differenza, se non una manciata di metodi predefiniti.  
Questo non significa che Ruby sia prototype based, ma può comportarsi  
come tale; idem per perl usando l’apposito modulo.

Ad ogni modo, Ecmascript 4 e OpenLaszlo sono due esempi di linguaggi in  
cui coesistono prototypes e classi.

Andrea

---

<div class="post-metadata">

**Author:** ![Gian\_luca\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e8c25b/32.png) [@Gian\_luca\_C](https://www.ruby-forum.com/u/Gian_luca_C)\
**Post date:** [July 15, 2009, 7:39pm UTC](https://www.ruby-forum.com/t/in-cosa-ruby-a-prototype-based/172132/4 "2009-07-15T19:39:03Z")

</div>

> > > diverse e framentate su dove Ruby sia prototype based.  
> > > L’unica cosa che gli manca è il meccanismo vero e proprio di prototype,  
> > > ma i meccanismi base ci sono; in particolare, il fatto di poter  
> > > ridefinire o undefinire un metodo su un oggetto e non necessariamente su  
> > > una classe.

giusto, tanto più che l’unico modo per definire un class method in ruby  
è appunto con questo stile, ovvero

class C  
def C.foo end  
end

( o self.foo o class \<\< self def foo )

cioè definendo un metodo che esiste solo per un’istanza della classe Class

C’è una differenza con altri linguaggi prototype based però, la relazione di  
ereditarietà non è dinamica, cioè, non si può cambiare la superclasse di un  
oggetto (a meno di sporchi trucchi 🙂 ma è comunque molto semplice  
implementarla se si vuole (method\_missing e poco altro)

> Peraltro tra un oggetto e una classe Ruby non c’è quasi nessuna  
> differenza, se non una manciata di metodi predefiniti.  
> Questo non significa che Ruby sia prototype based, ma può comportarsi  
> come tale; idem per perl usando l’apposito modulo.

idem per python, e son sicuro che in tcl non avrebbero problemi 🙂
