Intanto vorrei ringraziare tutti coloro che sn sempre disposti ad
aiutare persone come me ai primi approcci con ruby…
Il mio problema attuale è il seguente:
ho due piani di studio: @piano_di_studi e p
Ho il seguente metodo che calcola i crediti comuni tra i due piani,
ovvero per gli esami in comune tra p e @piani_di_studio, si va a
incrementare crediti_comuni con i crediti di quell’esami pescati
dall’hash @@crediti…
def crediti_comuni§
crediti_comuni = 0
for j in p
for i in @piano_di_studi#per ogni esame nel piano
if (i.eql?(j))
crediti_comuni += @@crediti[i]
end
end
return crediti_comuni
end
end
l’errore che mi viene dato è il seguente
“189:in crediti_comuni': undefined methodeach’ for
#<PianoDiStudi:0xa3d3b @piano_di_studi=#<Set: {}>> (NoMethodError)”
dove la riga 189 è la seguente -> for j in p
per quel poco di esperienza che ho pare che non riesca a scorrere p…
perchè se scorre @piano_di_studi non scorre p?
(ruby e il caldo non fanno una bella coppia… sigh… )
so che il for usa l’each ma non ho mai definito un metodo per gestire la
cosa…
cosa dovrei fare quindi?
Dall’errore, sembra che @piano_di_studi sia un oggetto di tipo
PianoDiStudi, che non e’ un Enumerable.
Quello su cui tu vuoi iterare sembra invece essere il set
piano_di_studi, attributo dell’oggetto @piano_di_studi.
Quindi, se l’hai reso pubblico, @piano_di_studi.piano_di_studi.
Il mio problema attuale è il seguente:
ho due piani di studio: @piano_di_studi e p
Ho il seguente metodo che calcola i crediti comuni tra i due piani,
ovvero per gli esami in comune tra p e @piani_di_studio, si va a
incrementare crediti_comuni con i crediti di quell’esami pescati
dall’hash @@crediti…
def crediti_comuni§
crediti_comuni = 0
for j in p
for i in @piano_di_studi#per ogni esame nel piano
if (i.eql?(j))
crediti_comuni += @@crediti[i]
end
end
return crediti_comuni
end
end
Ma non conviene lavorare sull’intersezione dei due piani di studi (visto
che almeno uno di loro e’ un Set)?
def crediti_comuni§
(p & @piano_di_studi.piano_di_studi).inject(0) do |sum, x|
sum += @@crediti[x]
end
end
puts p1.crediti_comuni(p2) che richiama il metodo di cui parlavamo…
come nel resto dell’esercizio ho scorso p1 nn mi pareva così difficile
scorrere p2!
Claudio Petasecca D. wrote:
Dall’errore, sembra che @piano_di_studi sia un oggetto di tipo
PianoDiStudi, che non e’ un Enumerable.
Quello su cui tu vuoi iterare sembra invece essere il set
piano_di_studi, attributo dell’oggetto @piano_di_studi.
Quindi, se l’hai reso pubblico, @piano_di_studi.piano_di_studi.