在目录中应用策略

时间:2012-03-25 09:57:10

标签: ruby

我正在使用“人类”方法开发一个数独求解器。

我在lib/strategies目录中列出了一系列策略,它们的工作方式相同,就像这样StrategyName.new(sudoku).apply

如何按照我选择的顺序自动应用目录中的所有策略?我可以让每个策略给出一个ID来返回它在策略列表中的位置,或者在解算器类中以正确的顺序将它们全部注册。但是如何列出它们并应用它们? (自动装载已开启)

提前谢谢!

1 个答案:

答案 0 :(得分:2)

假设您的文件遵循典型的典型命名约定:

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方法。

@strategies.each { |s| break if s.apply }