LoginSignup
31
22

More than 5 years have passed since last update.

rubyのrangeオブジェクトのinclude?とcover?の違い

Posted at

日付の範囲に対して現在日時が含まれているか判定したいとき

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?の結果がことなる可能性がある

使う場合はどちらの比較方法が適切か考えて使ったほうがいいかもしれない

31
22
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
22