C'è un modo in Ruby per una classe per sapere quante istanze esistono e può elencarle?Come posso elencare tutti gli oggetti creati da una classe in Ruby?
Ecco una lezione di prova:
class Project
attr_accessor :name, :tasks
def initialize(options)
@name = options[:name]
@tasks = options[:tasks]
end
def self.all
# return listing of project objects
end
def self.count
# return a count of existing projects
end
end
Ora mi creano oggetti del progetto di questa classe:
options1 = {
name: 'Building house',
priority: 2,
tasks: []
}
options2 = {
name: 'Getting a loan from the Bank',
priority: 3,
tasks: []
}
@project1 = Project.new(options1)
@project2 = Project.new(options2)
Quello che vorrei è avere metodi di classe come Project.all
e Project.count
per restituire un elenco e il conteggio dei progetti attuali.
Come posso fare?
Devi 'includere ObjectSpace' nella classe affinché funzioni? – onebree
@HunterStevens no, non stiamo mescolando il modulo nella nostra classe, solo chiamando un metodo su di esso –
** AVVISO **: questa soluzione può rendere facile spararsi nel piede. Se non si mantiene un riferimento ai propri oggetti (ad esempio se si esegue il comando 'Project.new' senza assegnare il risultato a qualcosa), a un certo punto verranno raccolti garbage collection e' ObjectSpace.each_object' ovviamente smetterà di segnalarli. Usando '@@ instances = []' invece come nella risposta di rohit89 si risolve questo problema mantenendo un riferimento a quegli oggetti. – vmarquet