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
on 01.05.2008 12:30
on 01.05.2008 13:03
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Aldo Italo 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 | http://flickr.com/acangiano -----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-----
on 02.05.2008 12:12
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 -----------------------
on 02.05.2008 14:46
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Aldo Italo 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: 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 - Zen and the Art of Programming http://stacktrace.it | http://math-blog.com http://twitter.com/acangiano | http://flickr.com/acangiano -----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-----
on 02.05.2008 14:57
> 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
on 02.05.2008 18:35
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.
on 02.05.2008 18:45
-----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 | http://flickr.com/acangiano -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkgbRAoACgkQqCqsu0qUj9SYUQCgtuov6zmf1OWZoNTPptDu1znC jJAAoKdHDvQjc6hQ8bP79x4upV0LODPJ =cMTI -----END PGP SIGNATURE-----