Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

( detect | find )は最初から順番に条件を見る

detectまたはfindは配列から一致する要素を捜索するメソッドです。

検索はtrueになったところで打ち切ってくれます。

(1..9).to_a.detect{|i| p i == 5}
#>> false
#>> false
#>> false
#>> false
#>> true
#=> 5

使い方を工夫すると、こんな事もできます

##  rails / activesupport / lib / active_support / core_ext / date_and_time / calculations.rb
def beginning_of_quarter
 first_quarter_month = [10, 7, 4, 1].detect { |m| m <= month }
 beginning_of_month.change(:month => first_quarter_month)
end

実際調べてみると、こんな挙動です。

month = 3; [10,7,4,1].find{|m| p month >= m}
#>> false
#>> false
#>> false
#>> true
#=> 1

month = 11; [10,7,4,1].find{|m| p month >= m}
#>> true
#=> 10