PDA

View Full Version : [Ruby] Ereditarietà


caustico
19-03-2008, 10:02
ciao a tutti, penso che per risolvere questa cosa sia necessario qualcuno che conosca ruby in particolare, non me ne vogliano i puristi di java o c++, il problema non è di "concetto" quanto piuttosto "tecnico": spiego subito:
ho una classe Persona cosi fatta:

class Persona

attr_accessor :nome, :cognome

def initialize(n,c)
@nome = n
@cognome = c
end

def to_s
"#@nome #@cognome"
end

end


una classe programmatore che estende persona:

class Programmatore < Persona

attr_accessor :salario, :ling_con

def initialize(n,c,sal,lcon)
super(n,c)
@salario = sal
@ling_con = lcon
end

end


e una classe datore di lavoro che estende persona:

class Datore_lavoro < Persona

attr_accessor :disp, :ling_ric, :impiegati

def initialize(n,c,d,lric)
super(n,c)
@disp = d
@ling_ric = lric
@impiegati = []
end
end


per quest'ultima devo scrivere un metodo assumi(p)

def assumi(p)
if p.salario <= @disp
@disp -= p.salario
for linguaggio in p.ling_con
@ling_ric.delete(linguaggio)
end
@impiegati << p
end
end


che assume programmatori, per fare questo devo fare una serie di controlli, il problema è che quando provo ad accedere al salario del programmatore facendo p.salario il compilatore mi dice:

undefined method `salario' for nil:NilClass (NoMethodError)

e ha ragione, visto che salario è una variabile di istanza di programmatore. . .la mia domanda quindi è: come faccio ad accedere alle variabili di istanza definite in un altra classe, probabilmente devo creare un programmatore, ma in questo caso che parametri vi passo?

ps: le classi sono contenute in file separati nominati con il nome della classe contenuti nella stessa cartella di progetto di netbeans.

pierosa
19-03-2008, 10:32
l'attributo salario di Programmatore è pubblico quindi è accessibile a tutti, il problema secondo me è un'altro

undefined method `salario' for nil:NilClass (NoMethodError)

questo errore indica che tu stai chiamando il metodo salario su un oggetto nil quindi non inizializzato. Controlla quando richiami il metodo assumi che il parametro che gli passi non sia nil.
Ciao

caustico
19-03-2008, 10:38
l'attributo salario di Programmatore è pubblico quindi è accessibile a tutti, il problema secondo me è un'altro

undefined method `salario' for nil:NilClass (NoMethodError)

questo errore indica che tu stai chiamando il metodo salario su un oggetto nil quindi non inizializzato. Controlla quando richiami il metodo assumi che il parametro che gli passi non sia nil.
Ciao

sei un genio!!! grazie funziona!!!