# Esempio superclasse

**URL:** <https://www.ruby-forum.com/t/esempio-superclasse/136378>\
**Category:** IT\
**Created:** [May 1, 2008, 12:30pm UTC](https://www.ruby-forum.com/t/esempio-superclasse/136378 "2008-05-01T12:30:31Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [May 1, 2008, 12:30pm UTC](https://www.ruby-forum.com/t/esempio-superclasse/136378/1 "2008-05-01T12:30:31Z")

</div>

buongiorno a tutti,  
sono un principiante, da poco ho cominciato a studiare questo fantastico  
linguaggio di programmazione.

ho preso spunto dalla guida di [ruby-doc.org](http://ruby-doc.org), per provare un esempio di  
oggetto creato da una classe ereditata da superclasse che vedete qui  
sotto, perÃ² mi restituisce un errore: troppi argomenti -wrong number of  
arguments (4 for 3)

sapreste indicarmi dove sto sbagliando?

vorrei poi sapere come inserire il codice al’ interno dei messaggi (sono  
disponibili dei tag specifici per delimitarlo?) mi sembra che il forum  
sia un po carente di queste funzioni.

un ringraziamento anticipato a chi mi riponderÃ

#startcode  
class Song  
def initialize(name, artist, duration)  
@name = name  
@artist = artist  
@duration = duration  
puts “new song created: #{@name} - #{@artist} (#{@duration}  
seconds)”  
end  
end

class KaraokeSong \< Song  
def initialize(name, artist, duration, lyrics)  
super(name, artist, duration)  
@lyrics = lyrics  
puts super+“#{@lyrics}”  
end  
end

aSong = KaraokeSong.new(“My Way”, “Sinatra”, 225, “And now, the…”)  
#end code

---

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [May 1, 2008, 1:03pm UTC](https://www.ruby-forum.com/t/esempio-superclasse/136378/2 "2008-05-01T13:03:45Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

Aldo I. wrote:

> ho preso spunto dalla guida di [ruby-doc.org](http://ruby-doc.org), per provare un esempio di  
> oggetto creato da una classe ereditata da superclasse che vedete qui  
> sotto, però mi restituisce un errore: troppi argomenti -wrong number of  
> arguments (4 for 3)

Ciao Aldo,

quando chiami super senza argomenti all’interno dell’initialize della  
classe KaraokeSong, stai implicitamente passando i suoi 4 argomenti  
all’inizialize della superclasse, che però ne richiede solo 3. Per cui  
Ruby ti mostra l’errore wrong number of arguments (4 for 3).

Dovresti passare esplicitamente i primi 3 parametri ma per come hai  
strutturato il codice, avrai comunque problemi perché otteresti un  
errore del tipo: NoMethodError: undefined method `+’ for nil:NilClass

In questo caso l’errore è dovuto al fatto che stai cercando di  
concatenare il valore di ritorno di super con la stringa " #{@lyrics}".  
Questo non è possibile perché il metodo initialize della supercalsse  
ritorna il valore nil (che è il valore di default di una chiamata al  
metodo puts).

Visto che sei agli inizi, direi che utilizzare un secondo metodo che  
ritorna la stringa desiderata, è forse il modo più semplice per venirne  
fuori.

Ciao,  
Antonio

* * *

[http://antoniocangiano.com](http://antoniocangiano.com) - Zen and the Art of Programming  
[http://stacktrace.it](http://stacktrace.it) | [http://math-blog.com](http://math-blog.com)  
[http://twitter.com/acangiano](http://twitter.com/acangiano) | [Tony Cangiano | Flickr](http://flickr.com/acangiano)  
-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.8 (Darwin)  
Comment: Using GnuPG with Mozilla - [http://enigmail.mozdev.org](http://enigmail.mozdev.org)

iEYEARECAAYFAkgZo3QACgkQqCqsu0qUj9TtsACfQJehmDT9ETQYWWRGCON+683r  
kyMAoLa/NdERZ36KBvLarAYJ0nQt4X/j  
=OAm6  
-----END PGP SIGNATURE-----

---

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [May 2, 2008, 12:12pm UTC](https://www.ruby-forum.com/t/esempio-superclasse/136378/3 "2008-05-02T12:12:59Z")

</div>

grazie per la risposta esauriente.  
ho modificato il codice come vedi sotto e cosi funziona.  
perÃ² non ho ancora capito bene per quale motivo come avevo scritto  
prima il “super” passa anche i 4 argomenti…

la forma che vedi qui sotto l’ ho imparata da questo libro  
[http://www.apogeonline.com/libri/88-503-2510-X/scheda](http://www.apogeonline.com/libri/88-503-2510-X/scheda)  
perÃ² volevo spingermi oltre a quell’ esempio un po banale che ho  
riportato, mi sapresti indicare dove posso reperire degli esempi piÃ¹  
avanzati?

ciao

#start code -----------------------  
class Song  
def initialize(name, artist, duration)  
@name = name  
@artist = artist  
@duration = duration  
end  
def inspect  
"name:#{@name} artist:#{@artist} duration:#{@duration} "  
end  
end

class KaraokeSong \< Song  
def initialize(name, artist, duration, lyrics)  
super(name, artist, duration)  
@lyrics = lyrics  
end  
def inspect  
super + " lyrics:#{@lyrics}"  
end  
end  
#end code -----------------------

---

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [May 2, 2008, 2:46pm UTC](https://www.ruby-forum.com/t/esempio-superclasse/136378/4 "2008-05-02T14:46:28Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

Aldo I. wrote:

> grazie per la risposta esauriente.  
> ho modificato il codice come vedi sotto e cosi funziona.  
> però non ho ancora capito bene per quale motivo come avevo scritto  
> prima il “super” passa anche i 4 argomenti…

Quando usi super senza argomenti, Ruby ignora temporaneamente il metodo  
definito nella classe corrente e riesegue la chiamata, invocando di  
fatto il metodo della superclasse e passandogli tutti gli argomenti  
ricevuti. Per cui KaraokeSong.new(a, b, c, d) invocherà initialize(a, b,  
c, d) della classe Song, che però si aspetta solo 3 parametri, per cui  
Ruby solleverà un’eccezione. Se hai bisogno di passare solo 3 parametri,  
puoi farlo specificandoli: super(a, b, c).

> la forma che vedi qui sotto l’ ho imparata da questo libro  
> [http://www.apogeonline.com/libri/88-503-2510-X/scheda](http://www.apogeonline.com/libri/88-503-2510-X/scheda)  
> però volevo spingermi oltre a quell’ esempio un po banale che ho  
> riportato, mi sapresti indicare dove posso reperire degli esempi più  
> avanzati?

Se vuoi iniziare a fare sul serio, ci sono tre libri che ti consiglio  
vivamente:

1. The Ruby Way, 2nd edition
2. Design Patterns in Ruby
3. Ruby Cookbook

Ma cerca di crearti solide basi prima, studiando bene il libro che hai.

Ciao,  
Antonio

* * *

[http://antoniocangiano.com](http://antoniocangiano.com) - Zen and the Art of Programming  
[http://stacktrace.it](http://stacktrace.it) | [http://math-blog.com](http://math-blog.com)  
[http://twitter.com/acangiano](http://twitter.com/acangiano) | [Tony Cangiano | Flickr](http://flickr.com/acangiano)  
-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.8 (Darwin)  
Comment: Using GnuPG with Mozilla - [http://enigmail.mozdev.org](http://enigmail.mozdev.org)

iEYEARECAAYFAkgbDRAACgkQqCqsu0qUj9Q9FQCeI0QeRZjalBMDLghglpSq8DQ3  
Zf0Anjg5X+epDUpMd96DSH29ajhmRjfe  
=fJx/  
-----END PGP SIGNATURE-----

---

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [May 2, 2008, 2:57pm UTC](https://www.ruby-forum.com/t/esempio-superclasse/136378/5 "2008-05-02T14:57:13Z")

</div>

> Se vuoi iniziare a fare sul serio, ci sono tre libri che ti consiglio  
> vivamente:
> 
> 1. The Ruby Way, 2nd edition
> 2. Design Patterns in Ruby
> 3. Ruby Cookbook

grazie per i preziosi consigli, ho iniziato a dare una sbirciata a Ruby  
Cookbook su books.google.it e vedo che Ã¨ ricco di contenuti  
perÃ² prima di fare il passo piÃ¹ lungo della gamba Ã¨ meglio che finisca  
con l’ altro libro, sperando che poi sia tutto chiaro 🙂  
a presto

---

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [May 2, 2008, 6:35pm UTC](https://www.ruby-forum.com/t/esempio-superclasse/136378/6 "2008-05-02T18:35:47Z")

</div>

io ho letto il libro e posso dirti che come introduzione a ruby è ben  
strutturato, anche se IMHO gli ultimi capitoli non sono ben  
congegnati come i primi, pero è un ottimo volume.

Luca

ps: tra l’altro alcuni degli autori-collabotari alla stesura sono  
presenti in lista è puoi chiedere direttamente a loro, perché sempre  
molto disponibili.

---

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [May 2, 2008, 6:45pm UTC](https://www.ruby-forum.com/t/esempio-superclasse/136378/7 "2008-05-02T18:45:53Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

luca sabato wrote:  
| ps: tra l’altro alcuni degli autori-collabotari alla stesura sono  
| presenti in lista è puoi chiedere direttamente a loro, perché sempre  
| molto disponibili.

LOL. Sì, in effetti uno di quelli sarei io. 🙂

* * *

[http://antoniocangiano.com](http://antoniocangiano.com) - Zen and the Art of Programming  
[http://stacktrace.it](http://stacktrace.it) | [http://math-blog.com](http://math-blog.com)  
[http://twitter.com/acangiano](http://twitter.com/acangiano) | [Tony Cangiano | Flickr](http://flickr.com/acangiano)  
-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.9 (MingW32)  
Comment: Using GnuPG with Mozilla - [http://enigmail.mozdev.org](http://enigmail.mozdev.org)

iEYEARECAAYFAkgbRAoACgkQqCqsu0qUj9SYUQCgtuov6zmf1OWZoNTPptDu1znC  
jJAAoKdHDvQjc6hQ8bP79x4upV0LODPJ  
=cMTI  
-----END PGP SIGNATURE-----
