Czy jest jakiś sposób w Rubim, aby klasa wiedziała, ile jej wystąpień istnieje i czy może je wymienić?Jak wyświetlić wszystkie obiekty utworzone z klasy w Ruby?
Oto klasa próbki:
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
Teraz tworzę obiektów projektowych tej klasy:
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)
Chciałbym to mieć metod klasy jak Project.all
i Project.count
zwraca listę i liczba bieżących projektów.
Jak to zrobić?
Czy chcesz włączyć obiekt ObjectSpace do klasy, aby to działało? – onebree
@HunterStevens nie, nie mieszamy modułu do naszej klasy, po prostu wywołując na nim metodę –
** OSTRZEŻENIE **: to rozwiązanie może ułatwić strzelanie sobie w stopę. Jeśli nie zachowujesz odniesienia do twoich obiektów (na przykład, jeśli zrobisz "Project.new" bez przypisywania wyniku do czegoś), będą one w pewnym momencie śmieciami, a obiekt "ObjectSpace.each_object" oczywiście przestanie je zgłaszać. Użycie '@@ instances = []' zamiast jak w odpowiedzi rohit89 rozwiązuje ten problem, zachowując odniesienie do tych obiektów. – vmarquet