У меня есть следующий метод:
def fetch_something
@fetch_something ||= array_of_names.inject({}) do |results, name|
begin
results[name] = fetch_value!(name)
rescue NoMethodError, RuntimeError
next
end
results
end
end
По своей цели: он извлекает значение для заданного name
, которое может вызвать ошибку, и в этом случае он проигнорирует name
и попробует следующее.
Хотя это работает нормально, я получаю сообщение об ошибке от Rubocop:
Lint/NextWithoutAccumulator: используйте next с аргументом-аккумулятором в уменьшении.
Поиск этой ошибки в Google приводит меня к http://www.rubydoc.info/gems/rubocop/0.36.0/RuboCop/Cop/Lint/NextWithoutAccumulator, где указано не пропускать аккумулятор, в результате чего метод будет выглядеть следующим образом:
def fetch_something
@fetch_something ||= array_of_names.inject({}) do |results, name|
begin
results[name] = fetch_value!(name)
rescue NoMethodError, RuntimeError
next(name)
end
results
end
end
Проблема в том, что это изменение нарушает работающий метод. Любые идеи о том, как решить эту проблему?
Update: Demonstrational example:array_of_names = ['name1','name2','name3']
def fetch_value!(name)
# some code that raises an error if the name doesn't correspond to anything
end
fetch_something
# => {'name1' => {key1: 'value1', ...}, 'name3' => {key3: 'value3', ...}}
# 'name2' is missing since it wasn't found durcing the lookup
next(results)
? - person user12341234   schedule 23.05.2016