Rubyではメソッドの引数リストの括弧を省略できるけど,省略しまくっていたら何か失敗したよ,という話.
現在時刻が07:02,13:02,18:02,23:02のときに真になる式を以下のように書いた.
# まちがい [7, 13, 18, 23].include? Time.now.hour && Time.now.min == 2
これが当該時刻になってもちゃんと真にならなかった.
何でちゃんと動作しないのか半日くらい考えた後,もしやと思い以下のように括弧を追加してみたら当該時刻でtrueが返ってきた.
# ただしい [7, 13, 18, 23].include?(Time.now.hour) && Time.now.min == 2
つまり,メソッドの引数リストの括弧を省略したら,
# まちがい [7, 13, 18, 23].include?(Time.now.hour && Time.now.min == 2)
こう解釈されてしまっていた.(Time.now.hour && Time.now.min == 2)は論理積の条件式なのでtrueかfalseの値を取るが,配列[7, 13, 18, 23]の中にはtrueもfalseも含まれていないためinclude?の実行結果は常にfalseになる,というめちゃくちゃな動作をしていたという罠.
ちょっと1階のベランダから飛び降りてくる.