From: Alexey Muranov Date: 2011-12-25T22:05:22+09:00 Subject: [ruby-core:41804] [ruby-trunk - Bug #5798] Range#include? needs some optimization Issue #5798 has been updated by Alexey Muranov. I agree that the behavior you point out seems inconsistent, because (0..1).include?(0.5) => true ---------------------------------------- Bug #5798: Range#include? needs some optimization https://bugs.ruby-lang.org/issues/5798 Author: Joey Zhou Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: 1.9.3p0 For example: ('aa'..'az').include? 123 it seems that the procedure is: 1. check whether 'aa' == 123 # false 2. 'aa'.succ # 'ab' 3. check whether 'ab' == 123 # false 4. 'ab'.succ # 'ac' 5. check whether 'ac' == 123 # false ... n-1. 'ay'.succ # 'az' n. check whether 'az' == 123 # false finally return false However, 'aa' and 123 are not the same class. It's not necessary to take the whole steps of 'succ' and '=='. Maybe it should check 'aa'.class and 123.class first, or use <=> instead of == to check, when 'aa' <=> 123 returns nil(== only returns true/false, no nil), the procedure breaks. -- http://redmine.ruby-lang.org