Как подтянуть этот код Ruby? - PullRequest
2 голосов
/ 18 февраля 2010

Как я могу написать это лучше. Я пытался использовать инъекции вместо каждого, но продолжал сталкиваться с ошибками. Я хотел бы подтянуть блок.

def to_proc
    levels_of_nesting = @fields.zip(@orderings)

    procedure = nil
    levels_of_nesting.each do |field, ordering|
      procedure = proc_for(field, ordering) and next if procedure.nil?
      procedure = procedure.decorate_w_secondary_sorting_level(proc_for(field, ordering))
    end
    procedure
  end

1 Ответ

3 голосов
/ 18 февраля 2010

Я бы использовал карту, чтобы запустить все через proc_for, а затем объединить процессы с помощью inject.

def to_proc
  @fields.zip(@orderings).map do |field, ordering|
    proc_for(field, ordering)
  end.inject do |prev,curr|
    prev.decorate_w_secondary_sorting_level curr
  end
end

Это заставляет методы итератора выполнять управление потоком за вас, избегая ложных нулей и операторов if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...