Tbpgr Blog

Organization Development Engineer tbpgr(てぃーびー) のブログ

Ruby | ObjectSpace | each_object

概要

ObjectSpace#each_object {|object| ...} -> Integer
ObjectSpace#each_object(klass) {|object| ...} -> Integer
ObjectSpace#each_object -> Enumerator
ObjectSpace#each_object(klass) -> Enumerator

詳細

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

サンプルコード
require 'tbpgr_utils'

class Person
  attr_reader :name, :age
  def initialize(name, age)
    @name, @age = name, age
  end
end

tanaka = Person.new('tanaka', 23)
suzuki = Person.new('suzuki', 33)

bulk_puts_eval binding, <<-EOS
ObjectSpace.each_object
ObjectSpace.each_object {}
ObjectSpace.each_object(Person)
ObjectSpace.each_object(Person) {}
EOS
ObjectSpace.each_object(Person) { |e|p e.inspect }

__END__
下記はTbpgrUtils gemの機能
bulk_puts_eval

https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

ObjectSpace.each_object            # =>       #<Enumerator: ObjectSpace:each_object(false)>
ObjectSpace.each_object {}         # => 26943
ObjectSpace.each_object(Person)    # =>       #<Enumerator: ObjectSpace:each_object(Person)>
ObjectSpace.each_object(Person) {} # => 2
"#<Person:0x00000600be0310 @name=\"suzuki\", @age=33>"
"#<Person:0x00000600be0388 @name=\"tanaka\", @age=23>"