Кажется, у меня есть немного странный вариант использования Ruby Enumerable. Я пытаюсь сделать что-то вроде следующего:
result = my_strategies.some_method do |strategy|
strategy.get_result
end
Метод some_method — это просто заполнитель, но он лежит в основе остальной части этого вопроса.
Перечислимый my_strategies содержит упорядоченный список стратегий для получения значения из удаленной службы; более предпочтительная стратегия запускается перед менее предпочтительной стратегией,
Иногда более предпочтительная стратегия терпит неудачу, и одни повторные попытки не исправят ситуацию. В этом случае стратегия вернет ноль.
Я вижу способ сделать это, полагаясь на каждый блок, таким образом:
result = nil
my_strategies.each do |strategy|
result = strategy.get_result
if not r.nil?
break
end
end
Это кажется излишне шумным. Мне интересно, есть ли метод, который я могу заменить some_method для моего первого примера; что-то похожее на .any?, но возвращающее значение, из-за которого блок становится истинным, а не просто возвращает истину.
Альтернативные подходы к тому, что я пытаюсь сделать, также приветствуются.
EDIT: я изначально задал этот вопрос, потому что пробовал этот блок кода:
result = my_strategies.find do |strategy|
strategy.get_result
end
За исключением того, что это вернуло мне успешную стратегию, а не значение, которое она вернула, когда это произошло. Меня не волнует, какая стратегия принесла мне ценность, я просто хочу знать, в чем ценность.