私は「人間」の方法を使って数独ソルバーを開発しています。ディレクトリに戦略を適用する
私はlib/strategies
ディレクトリに戦略のリストを持っており、それらはすべて同じように機能する、それがどのように私は自動的に私が選択した順序でディレクトリ内のすべての戦略を適用しない。このStrategyName.new(sudoku).apply
のように言うことは?私は、各戦略にIDを与えて、例えば戦略リストにその位置を返すようにしたり、ソルバークラスで正しい順序ですべてを登録したりすることができます。しかし、どのようにそれらをすべて列挙して適用するのですか? (自動ロードオン)
ありがとうございます!
Dir[File.expand_path("../strategies/*.rb", __FILE__)].each do |f|
name = File.basename(f, ".rb")
klass = name.capitalize.gsub(/(_([a-z]))/) { |c| c[1].upcase }
@strategies << const_get(klass).new(sudoku)
end
@strategies.sort_by! { |s| s.priority }
各戦略と仮定すると#priority
方法があります。
「SN.new(SN.new(sudoku).apply).apply' ...のようなものですか? – Dogbert
@Dogbert、戦略設計パターンを見てください。通常はループです。 – d11wtq