Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Range | cover?

概要

Range#cover?(obj) -> bool

詳細

obj が範囲内に含まれている時に真を返却。
Range#include? ( member?, === ) と異なり <=> メソッドによる演算により範囲内かどうかを判定。

include? => 離散値
cover? => 連続値

ただし、数値は例外として include? も連続値を扱っている。

サンプルコード
require 'tbpgr_utils'
require 'date'
require 'time'

def call_method_with_begin_rescue
  yield
rescue => e
  e.message
end

bulk_puts_eval binding, <<-EOS
(1.1..2.3).include?(1.1)
(1.1..2.3).include?(1.555)
(1.1..2.3).cover?(1.1)
(1.1..2.3).cover?(1.555)
('b'..'d').include?('d')
('b'..'d').include?('ba')
('b'..'d').cover?('d')
('b'..'d').cover?('ba')
(Date.new(2014,1,3)..Date.new(2014,1,5)).include?(Date.new(2014,1,5))
call_method_with_begin_rescue { (Time.new(2014,1,3)..Time.new(2014,1,5)).include?(Time.new(2014,1,4,10,10,10)) }
(Date.new(2014,1,3)..Date.new(2014,1,5)).cover?(Date.new(2014,1,5))
(Time.new(2014,1,3)..Time.new(2014,1,5)).cover?(Time.new(2014,1,4,10,10,10))
EOS

出力

(1.1..2.3).include?(1.1)                                                                                         # => true
(1.1..2.3).include?(1.555)                                                                                       # => true
(1.1..2.3).cover?(1.1)                                                                                           # => true
(1.1..2.3).cover?(1.555)                                                                                         # => true
('b'..'d').include?('d')                                                                                         # => true
('b'..'d').include?('ba')                                                                                        # => false
('b'..'d').cover?('d')                                                                                           # => true
('b'..'d').cover?('ba')                                                                                          # => true
(Date.new(2014,1,3)..Date.new(2014,1,5)).include?(Date.new(2014,1,5))                                            # => true
call_method_with_begin_rescue { (Time.new(2014,1,3)..Time.new(2014,1,5)).include?(Time.new(2014,1,4,10,10,10)) } # => "can't iterate from Time"
(Date.new(2014,1,3)..Date.new(2014,1,5)).cover?(Date.new(2014,1,5))                                              # => true
(Time.new(2014,1,3)..Time.new(2014,1,5)).cover?(Time.new(2014,1,4,10,10,10))                                     # => true