日付の範囲に対して現在日時が含まれているか判定したいとき
october = (Time.new(2014,10,1)..Time.new(2014,10,31))
include?
メソッドを使って判定しようとすると
october.include? Time.now
このようなエラーがでる
TypeError: can't iterate from Time
include?
の代わりにcover?
を使うと判定ができる
october.cover?(Time.now)
どちらのメソッドも引数に与えたオブジェクトが範囲内に存在するかを調べるメソッドだがドキュメントをみると
cover?(obj) -> bool
obj が範囲内に含まれている時に真を返します。
Range#include? と異なり <=> メソッドによる演算により範囲内かどうかを判定します。
とある、include?
は===
を使用して比較するのに対しcover?
は<=>
を使用して比較をする
つまり、範囲に含まれるオブジェクトによってinclude?
とcover?
の結果がことなる可能性がある
使う場合はどちらの比較方法が適切か考えて使ったほうがいいかもしれない