Có cách nào trong Ruby cho một lớp để biết có bao nhiêu trường hợp tồn tại và có thể liệt kê chúng không?Làm cách nào để liệt kê tất cả các đối tượng được tạo từ một lớp trong Ruby?
Dưới đây là một lớp học mẫu:
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
Bây giờ tôi tạo các đối tượng dự án của lớp này:
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)
Những gì tôi muốn là phải có phương pháp lớp như Project.all
và Project.count
để trả về một danh sách và đếm các dự án hiện tại.
Làm cách nào để thực hiện việc này?
Bạn có cần 'include ObjectSpace' trong lớp để làm việc này không? – onebree
@HunterStevens không, chúng tôi không trộn các mô-đun vào lớp của chúng tôi, chỉ cần gọi một phương pháp trên nó –
** CẢNH BÁO **: giải pháp này có thể làm cho nó dễ dàng để bắn mình vào chân. Nếu bạn không giữ một tham chiếu đến các đối tượng của bạn (ví dụ nếu bạn 'Project.new' mà không gán kết quả cho một cái gì đó), chúng sẽ được thu thập rác tại một số điểm và' ObjectSpace.each_object' rõ ràng sẽ ngừng báo cáo chúng. Sử dụng '@@ instances = []' thay vào đó trong câu trả lời của rohit89 giải quyết vấn đề này bằng cách giữ một tham chiếu đến các đối tượng đó. – vmarquet