読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

クラスごとのインスタンスの数を数える関数

Ruby

クラスごとのインスタンスの数を数える関数を書きました。

#インスタンスの数を数える
def count_instance
  count = {}
  ObjectSpace.each_object {|object|
    clazz = object.class.to_s
    count[clazz] ||= 0
    count[clazz] += 1
  }
  return count
end

#インスタンスの数を出力する
def dump_instance_count
  count_instance.each_pair {|k,v|
    puts "#{k} : #{v}"
  }
end

利用例。

# テスト用クラス
class Kitten; end

kittens = []

puts "\n---01"
dump_instance_count

puts "\n---02"
kittens << Kitten.new
dump_instance_count

puts "\n---03"
kittens << Kitten.new
dump_instance_count

puts "\n---04"
kittens << Kitten.new
dump_instance_count

実行結果です。Kittenの数が1つずつ増えています。

---01
Object : 3
ThreadGroup : 1
Bignum : 1
NoMemoryError : 1
Thread : 1
Module : 16
Array : 7
Class : 180
Hash : 1
IO : 3
SystemStackError : 1
fatal : 1
Float : 5
Binding : 1
File : 1
String : 201

---02
Object : 3
ThreadGroup : 1
Bignum : 1
NoMemoryError : 1
Thread : 1
Module : 16
Array : 23
Class : 180
Hash : 2
IO : 3
SystemStackError : 1
fatal : 1
Float : 5
Binding : 1
Kitten : 1
File : 1
String : 689

---03
Object : 3
ThreadGroup : 1
Bignum : 1
NoMemoryError : 1
Thread : 1
Module : 16
Array : 40
Class : 180
Hash : 3
IO : 3
SystemStackError : 1
fatal : 1
Float : 5
Binding : 1
Kitten : 2
File : 1
String : 1671

---04
Object : 3
ThreadGroup : 1
Bignum : 1
NoMemoryError : 1
Thread : 1
Module : 16
Array : 42
Class : 180
Hash : 4
IO : 3
SystemStackError : 1
fatal : 1
Float : 5
Binding : 1
Kitten : 3
File : 1
String : 2847