From: "mame (Yusuke Endoh)" Date: 2012-03-29T01:33:20+09:00 Subject: [ruby-core:43804] [ruby-trunk - Feature #5798][Assigned] Range#include? needs some optimization Issue #5798 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned Assignee set to matz (Yukihiro Matsumoto) ---------------------------------------- Feature #5798: Range#include? needs some optimization https://bugs.ruby-lang.org/issues/5798#change-25309 Author: yimutang (Joey Zhou) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: Target version: 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://bugs.ruby-lang.org/