変数から別のクラスメソッドを再定義する方法


理由:インスタンス化されたすべてのオブジェクトを記録するクラス変数(@@cps)を定義し、クラスメソッド(self.get_cps)によって外部インタフェースを提供するクラス(宝くじCp)を定義しました.
問題は、私の宝くじプログラムが最近50期の実際の状況とシミュレーションで生成されたデータをテストすることですが、私は一度にすべての履歴データをインスタンス化してからCpクラスのgetを修正したいだけです.cpsクラスメソッド.私のやり方はこうです.
クラス定義:

Class Cp 
  @@cps = []

  class << self
    def get_cps
      @@cps
    end

    ...
  end

  def initialize
    @@cps <<  self
  end

  ...
end

試験手順:

...... #           

$cps = Cp.get_cps

(1..50).each do |t|
  $n = t
  Cp.class_eval <<-END
    def self.get_cps
      $cps[$n..-1]	#              
    end
  END

  ...
end

目的は達成したが、グローバル変数を通じて気分が悪くなり、いったいどうすればルビーに見えるのだろうか.皆さん検討してください.
宝くじの実例を徐々に増やす方法ならともかく、マルチスレッド同時シミュレーションもしなければならない.
さらに、より良い方法を見つけます.

...... #           

(1..50).each do |t|
  Cp.class_eval <<-END
   def self.get_cps
      @@cps[#{t}..-1]
    end
  END

  ...
end

この方法はこのシーンで有効です.つまり、数字や文字列などの単純なオブジェクトだけが入ってきた場合、文字列を#{}で先に計算するように定義を変更することができる.しかし、複雑なオブジェクト(例えば、ローカルで入手したcpsが必要)の転送が必要であれば、方法はありますか?