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, 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
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Aldo I. wrote:
ho preso spunto dalla guida di 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 - Zen and the Art of Programming
http://stacktrace.it | http://math-blog.com
http://twitter.com/acangiano | Tony Cangiano | Flickr
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkgZo3QACgkQqCqsu0qUj9TtsACfQJehmDT9ETQYWWRGCON+683r
kyMAoLa/NdERZ36KBvLarAYJ0nQt4X/j
=OAm6
-----END PGP SIGNATURE-----
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
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 -----------------------
-----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
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:
- The Ruby Way, 2nd edition
- Design Patterns in Ruby
- Ruby Cookbook
Ma cerca di crearti solide basi prima, studiando bene il libro che hai.
Ciao,
Antonio
http://antoniocangiano.com - Zen and the Art of Programming
http://stacktrace.it | http://math-blog.com
http://twitter.com/acangiano | Tony Cangiano | Flickr
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkgbDRAACgkQqCqsu0qUj9Q9FQCeI0QeRZjalBMDLghglpSq8DQ3
Zf0Anjg5X+epDUpMd96DSH29ajhmRjfe
=fJx/
-----END PGP SIGNATURE-----
Se vuoi iniziare a fare sul serio, ci sono tre libri che ti consiglio
vivamente:
- The Ruby Way, 2nd edition
- Design Patterns in Ruby
- 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
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.
-----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 - Zen and the Art of Programming
http://stacktrace.it | http://math-blog.com
http://twitter.com/acangiano | Tony Cangiano | Flickr
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkgbRAoACgkQqCqsu0qUj9SYUQCgtuov6zmf1OWZoNTPptDu1znC
jJAAoKdHDvQjc6hQ8bP79x4upV0LODPJ
=cMTI
-----END PGP SIGNATURE-----