そのため、オブジェクトの配列からオブジェクトを選択しようとするコードがあります。オブジェクトが見つからない場合は、デフォルトを作成します。
lead_time = lead_times.select{|d| LeadTimeProfile.new unless d.day_of_week == day }
しかし、私が言えることから、これは私にdevaultLeadTimeProfileを返していません。
これを行う方法はありますか?それとも私はそれを正しく理解しましたか?
そのため、オブジェクトの配列からオブジェクトを選択しようとするコードがあります。オブジェクトが見つからない場合は、デフォルトを作成します。
Enumerable#findを見てください
lead_time = lead_times.find{ |d| d.day_of_week == day } || LeadTimeProfile.new
最初に配列をフィルタリングしてから、構築を行います
Lead_time = Lead_times.select {| d | d.day_of_week == day} .map {| d | LeadTimeProfile.new(d)}
ラムダをパラメーターとして渡すことも機能します。
lead_time = lead_times.find(lambda { LeadTimeProfile.new } ){ |d| d.day_of_week == day }
カイルが投稿したものと同じ結果を得る別の方法があります。これと、またはゲートを使用することとの間に違いはありませんが、チェーンメソッドの呼び出しを少しクリーンにする以外はありません。
day = 2
lead_times.find(-> { LeadTimeProfile.new }) { |p|
p.day_of_week == day
}.day_of_week