Forum: Italian Ruby user group Domanda sulle classi

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Giovanni C. (Guest)
on 2008-10-13 22:31
Salve a tutti!
Vi scrivo il codice che ho preso dal libro Programming Ruby - The
Pragmatic Programmers guide - 2nd,studiando il capitolo OBJECTS AND
ATTRIBUTES.

....... Inizio codice
class Song
 # Inizializzazione
 def initialize (name,artist,duration)
   @name = name
   @artist = artist
   @duration = duration
  # @name si chiama VARIABILE DI ISTANZA
 end
 # Fine inizializzazione
 # Inizio blocco definizione dei metodi
  def mostra
    "Song: #@name -- #@artist -- (#@duration)"
  end

end
# Costruzione dell'oggetto

# Definiamo una nuova classe figlia della precedente
class KaraokeSong < Song
  def initialize (name,artist,duration,lyrics)
    @lyrics = lyrics
  end
  def mostra
    super + " [#@lyrics]"
  end
end
song = Song.new("Non c'e'","Pausini","180")
puts song.mostra
puts "..................................................."
kara = KaraokeSong.new("pippo","pluto","100","1234567")
puts kara.mostra
kara1 = KaraokeSong.new("Azzurro","Celentano","200","Azzurro..il cielo
e'...")
puts kara1.mostra
........Fine codice
Contrariamente a quello che mostra il libro,mandando in esecuzione il
programmino ottengo questo:

Song: Non c'e' -- Pausini -- (180)
...................................................
Song:  --  -- () [1234567]
Song:  --  -- () [Azzurro..il cielo e'...]

Domandona... :-)
Perche' stampa solamente la parte finale e non stampa i campi name
,artist e duration?
Grazie per le eventuali risposte!!!
Pierpaolo S. (Guest)
on 2008-10-13 23:55
(Received via mailing list)
Ciao
...
class KaraokeSong < Song
 def initialize (name,artist,duration,lyrics)
   super (name,artist,duration)
   @lyrics = lyrics
 end
....

devi chiamare super nel costruttore di KaraokeSong altrimenti non ti
inizializza gli attributi ereditati da Song.
Giovanni C. (Guest)
on 2008-10-14 00:56
Pierpaolo S. wrote:
> Ciao
> ...
> class KaraokeSong < Song
>  def initialize (name,artist,duration,lyrics)
>    super (name,artist,duration)
>    @lyrics = lyrics
>  end
> ....
>
> devi chiamare super nel costruttore di KaraokeSong altrimenti non ti
> inizializza gli attributi ereditati da Song.

Adesso con il pezzo di codice cosi' modificato:
----------------------    INIZIO
class KaraokeSong < Song
  def initialize (name,artist,duration,lyrics)
    super(name,artist,duration)
    @lyrics = lyrics
  end
  def mostra
    super + " [#@lyrics]"
  end
end
--------------------------- FINE
funziona tutto.
Grazie per l'aiuto e la spiegazione!!!
This topic is locked and can not be replied to.