In cosa Ruby è prototype based?

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.

Il giorno 15 Luglio 2009 10.52, Gian luca
Colotto[email protected] 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

Pietro G. wrote:

Il giorno 15 Luglio 2009 10.52, Gian luca
Colotto[email protected] 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

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 :slight_smile: 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 :slight_smile: