Применять стратегии в каталоге - PullRequest
1 голос
/ 25 марта 2012

Я разрабатываю решатель судоку, используя "человеческие" методы.

У меня есть список стратегий в каталоге lib/strategies, и все они работают одинаково, то есть, как это StrategyName.new(sudoku).apply

Как автоматически применить все стратегии в каталоге в выбранном мной порядке?Я могу сделать так, чтобы каждая стратегия давала идентификатор, чтобы он возвращал свою позицию в списке стратегий, например, или регистрировал их в правильном порядке в классе решателя.Но как мне перечислить их все и применить их?(автозагрузка включена)

Заранее спасибо!

1 Ответ

2 голосов
/ 25 марта 2012

Предполагая, что ваши файлы следуют типичному типичному соглашению об именах:

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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...