私はKlassの作成されたオブジェクトのコレクションを維持したいと思います。 new
スルー:initialize
スルー:まず作成されたオブジェクトのコレクションを維持するための最良の方法
:セカンド
class Klass
@@objs = []
def initialize *args
# ... do regular initialization ...
Klass.send :add, self
end
class << self
def objs
@@objs
end
private
def add obj
@@objs << obj
end
end
end
class Klass
@@objs = []
class << self
def objs
@@objs
end
alias_method :old_new, :new # never thought someday I'd name something as "old_new"!
private :old_new
def new *args
obj = super
@@objs << obj
obj
end
end
end
テスト:私は2つの方法イム心持って
a = Klass.new
b = Klass.new
puts a.inspect #=> #<Klass:0xb7786ba0>
puts b.inspect #=> #<Klass:0xb7786b78>
puts Klass.objs.inspect #=> [#<Klass:0xb7786ba0>, #<Klass:0xb7786b78>]
両作品を、私は傾向があります"追加"のために第2の方法を好む:プライベートでなければならず、私は "Klass.send" 。最善の方法は何ですか?他の(より良い)方法がありますか?
を行うことができます!私は盲目でした! –