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.
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.