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

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

モジュールからクラス定義を消す

remove_constでモジュールからクラス定義を消すことができます。

module Test
  class Foo; end
end

# クラス定義を消す。
# remove_constはprivateメソッドなのでsendで送る。
Test.send(:remove_const, :Foo)

# 消されたクラスは利用できなくなる。
begin
  Test::Foo
  raise "あれ?"
rescue NameError
end
begin
  Test::Foo.new # インスタンス化も当然エラー
  raise "あれ?"
rescue NameError
end

でも、ObjectSpaceから探すと見つかったり。蓋がされてるだけっぽいなー。

# ObjectSpaceから探すと見つかる
ObjectSpace.each_object(Class) {|cl|
  next unless cl.name == "Test::Foo"
  p cl
  p cl.new 
}

実行結果です。

Test::Foo
#<Test::Foo:0x10030bc8>