Rubyではクラスのインスタンスがいくつあるのかを知る方法はありますか?ここでRubyでクラスから作成されたすべてのオブジェクトを一覧表示するにはどうすればよいですか?
は、サンプルクラスです:
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
今、私はこのクラスのプロジェクトのオブジェクトを作成します。私が望む何
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)
をリストを返すようにProject.all
とProject.count
のようなクラスメソッドを持つことです現在のプロジェクト数。
どうすればよいですか?
これを動作させるには、クラスに 'ObjectSpace'をインクルードする必要がありますか? – onebree
@HunterStevensいいえ、私たちのクラスにモジュールを混ぜているわけではなく、メソッドを呼び出すだけです –
**警告**:この解決法は、足で自分自身を簡単に撃つことができます。オブジェクトへの参照を保持していない場合(例えば、何かに結果を代入せずに 'Project.new'を実行した場合)、それらはある時点でガベージコレクションされ、' ObjectSpace.each_object'は明らかにそれらの報告を停止します。 rohit89の答えのように '@ @ instances = []'を使うと、これらのオブジェクトへの参照を保持することでこの問題を解決できます。 – vmarquet