変数から別のクラスメソッドを再定義する方法
理由:インスタンス化されたすべてのオブジェクトを記録するクラス変数(@@cps)を定義し、クラスメソッド(self.get_cps)によって外部インタフェースを提供するクラス(宝くじCp)を定義しました.
問題は、私の宝くじプログラムが最近50期の実際の状況とシミュレーションで生成されたデータをテストすることですが、私は一度にすべての履歴データをインスタンス化してからCpクラスのgetを修正したいだけです.cpsクラスメソッド.私のやり方はこうです.
クラス定義:
試験手順:
目的は達成したが、グローバル変数を通じて気分が悪くなり、いったいどうすればルビーに見えるのだろうか.皆さん検討してください.
宝くじの実例を徐々に増やす方法ならともかく、マルチスレッド同時シミュレーションもしなければならない.
さらに、より良い方法を見つけます.
この方法はこのシーンで有効です.つまり、数字や文字列などの単純なオブジェクトだけが入ってきた場合、文字列を#{}で先に計算するように定義を変更することができる.しかし、複雑なオブジェクト(例えば、ローカルで入手したcpsが必要)の転送が必要であれば、方法はありますか?
問題は、私の宝くじプログラムが最近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が必要)の転送が必要であれば、方法はありますか?