Gibt es in Ruby eine Möglichkeit für eine Klasse zu wissen, wie viele Instanzen davon existieren und kann sie aufgelistet werden?Wie listet ich alle Objekte auf, die in Ruby aus einer Klasse erstellt wurden?
Hier eine Beispielklasse:
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
Jetzt schaffe ich Projekt Objekte dieser Klasse:
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)
Was Ich mag würde, ist Klassenmethoden wie Project.all
und Project.count
haben eine Liste zurückzukehren und zählen Sie aktuelle Projekte.
Wie mache ich das?
Müssen Sie in der Klasse "ObjectSpace" einschließen, damit dies funktioniert? – onebree
@HunterStevens nein, wir mischen das Modul nicht in unsere Klasse ein, rufen nur eine Methode darauf –
** WARNUNG **: Diese Lösung kann es leicht machen, sich in den Fuß zu schießen. Wenn Sie keinen Verweis auf Ihre Objekte behalten (zum Beispiel, wenn Sie 'Project.new' durchführen, ohne das Ergebnis etwas zuzuweisen), werden sie zu einem gewissen Zeitpunkt unbemerkt gesammelt und' ObjectSpace.each_object' hört natürlich auf, sie zu melden. Die Verwendung von '@@ instances = []' statt wie in der Antwort von rohit89 löst dieses Problem, indem ein Verweis auf diese Objekte beibehalten wird. – vmarquet