Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > ObjectSpaceモジュール > each_object

module function ObjectSpace.#each_object

each_object {|object| ...} -> Integer[permalink][rdoc]
each_object(klass) {|object| ...} -> Integer
each_object -> Enumerator
each_object(klass) -> Enumerator

指定された klass と Object#kind_of? の関係にある全ての オブジェクトに対して繰り返します。引数が省略された時には全てのオブ ジェクトに対して繰り返します。 繰り返した数を返します。

ブロックが与えられなかった場合は、 Enumerator オブジェクトを返します。

次のクラスのオブジェクトについては繰り返しません

とくに、klass に FixnumSymbol などのクラスを指定した場合は、 何も繰り返さないことになります。 なお、Symbol については、かわりに Symbol.all_symbols が使用できます。

[PARAM] klass:
クラスかモジュールを指定します。
例: ブロックなし

p ObjectSpace.each_object
# => #<Enumerator: ObjectSpace:each_object(false)>
例: 全てのオブジェクトを扱う

ObjectSpace.each_object.take(5).each { |x| p x }
count = ObjectSpace.each_object { |x| x }
puts "Total count: #{count}"

# => "scope"
# => "scopes"
# => "sym"
# => "class_names"
# => "@corrections"
# => Total count: 9938
例: 任意のクラスを扱う

Person = Struct.new(:name)
s1 = Person.new("tanaka")
s2 = Person.new("sato")

count = ObjectSpace.each_object(Person) { |x| p x }
puts "Total count: #{count}"

# => #<struct Person name="sato">
# => #<struct Person name="tanaka">
# => Total count: 2