Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

( 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