What is the difference between `Range#include?` and `Range#cover?`?

后端 未结 3 1369
走了就别回头了
走了就别回头了 2020-12-06 04:05

Edit Fixed following toro2k\'s comment.

Range#include? and Range#cover? seem to be different as seen in the source code 1,

3条回答
  •  执笔经年
    2020-12-06 04:39

    date_range = {:start_date => (DateTime.now + 1.days).to_date, :end_date => (DateTime.now + 10.days).to_date}                
    date_range_to_check_for_coverage = {:start_date => (DateTime.now + 5.days).to_date, :end_date => (DateTime.now + 7.days).to_date}                
    
    (date_range[:start_date]..date_range[:end_date]).include?((DateTime.now + 5.days).to_date)                
    #true        
    (date_range[:start_date]..date_range[:end_date]).cover?((DateTime.now + 5.days).to_date)                
    #true        
    (date_range[:start_date]..date_range[:end_date]).include?(date_range_to_check_for_coverage[:start_date]..date_range_to_check_for_coverage[:end_date])                
    #true        
    (date_range[:start_date]..date_range[:end_date]).cover?(date_range_to_check_for_coverage[:start_date]..date_range_to_check_for_coverage[:end_date])                
    #false        
    

    Shouldn't the last line return true ?

    The reason I am asking is rubocop flags a conflict when I use include? in place of cover?. And clearly, my logic (to check if the range is included in another range) does not work with cover?.

提交回复
热议问题