我正在使用“人类”方法开发一个数独求解器。
我在lib/strategies
目录中列出了一系列策略,它们的工作方式相同,就像这样StrategyName.new(sudoku).apply
如何按照我选择的顺序自动应用目录中的所有策略?我可以让每个策略给出一个ID来返回它在策略列表中的位置,或者在解算器类中以正确的顺序将它们全部注册。但是如何列出它们并应用它们? (自动装载已开启)
提前谢谢!
答案 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 }