Range#each fixnums are special
authorksss <[email protected]>
Thu, 24 Apr 2014 13:53:54 +0000 (24 13:53 +0000)
committerksss <[email protected]>
Thu, 24 Apr 2014 13:53:54 +0000 (24 13:53 +0000)
mrblib/range.rb

index d587cab..1ec9ac5 100644 (file)
@@ -13,11 +13,23 @@ class Range
     return to_enum :each unless block_given?
 
     val = self.first
+    last = self.last
+
+    if val.kind_of?(Fixnum) && last.kind_of?(Fixnum) # fixnums are special
+      lim = last
+      lim += 1 unless exclude_end?
+      i = val
+      while i < lim
+        block.call(i)
+        i += 1
+      end
+      return self
+    end
+
     unless val.respond_to? :succ
       raise TypeError, "can't iterate"
     end
 
-    last = self.last
     return self if (val <=> last) > 0
 
     while((val <=> last) < 0)