Ruby Enumerableにちょっとしたユースケースがあります。nilでないときにEnumeration上のブロックの値を返す
result = my_strategies.some_method do |strategy|
strategy.get_result
end
をsome_method 方法は単なるプレースホルダーですが、この質問の残りの部分の後ろの基礎となっている:私は、次のような何かをしようとしています。
列挙型my_strategiesには、リモートサービスから値を取得するための戦略の順序付きリストが含まれています。
時には、より良い戦略が失敗する場合がありますが、再試行だけでは修正できないことがあります。その場合、戦略はnilを返します。
私はthusly、各ブロックに頼ることによってこれを行う方法を見ることができます:
result = nil
my_strategies.each do |strategy|
result = strategy.get_result
if not r.nil?
break
end
end
これは不必要にうるさいようです。私は最初の例ではsome_methodを代用できるメソッドがあるかどうか疑問に思っています。 .any?と似ていますが、trueを返すのではなく、ブロックをtrueにした値を返します。
私がしようとしているものに代わるアプローチも歓迎します。
EDIT:これは私の代わりにそれがなかったときに返される値の成功戦略を、返されたことを除いて
result = my_strategies.find do |strategy|
strategy.get_result
end
:私はコードブロックをしようとしたので、私はもともとこの質問をしました。私はどの戦略が私に価値をもたらしたか気にしない、ただ価値が何であるかを知りたい。あなたは結果を得るまで
甘い例;) – lucapette
はい。これは、自分が実装したパターンの一種です。私が疑問に思っていたことは、すでにどこかでこの実装が存在するかどうかです。私は自分のバージョンの既存の機能を書いてはいけません。 –
@Ed:いいえ、そのような抽象はありません。私はいくつかの参考文献を追加する答えを編集します。 – tokland