From: Warren Brown Date: 2005-11-23T15:41:32+09:00 Subject: [BUG] string range membership All, I ran across some code that was trying to validate that an integer was in a given range, however the integer and the range were Strings. The problem boils down to this: >ruby -e "p ('1'..'10').member?('2')" false Given that... >ruby -v -e "('1'..'10').each {|s| p s}" ruby 1.8.2 (2004-12-25) [i386-mswin32] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" ...it seems like ('1'..'10').member?('2') should return true. The problem lies in range.c, in the range_each_func() method. This method starts with the first value, then calls succ() to get the next value, breaking out of the loop when the value is no longer less than or equal to the ending value (or strictly less than the ending value on an exclusive range). Unfortunately, for the given string range this happens immediately, since '2' > '10'. I suppose that it could be argued that this is not a bug, but that would be a difficult argument to win. Also, I need to make sure that this is still a bug in the latest version of Ruby. Unfortunately, I'm too sleepy to investigate further or create a patch for this tonight, but I'll try to work on it some more tomorrow night (assuming nobody else fixes it first). - Warren Brown