Ruby/Range/Range Extension
Материал из Wiki.crossplatform.ru
Add method to Range
class Range def each_slow x = self.begin while x <= self.end yield x x = x.succ end end end (1..3).each_slow {|x| puts x} # 1 # 2 # 3
Extend Range to add new method
class Range # Open an existing class for additions def by(step) # Define an iterator named by x = self.begin # Start at one endpoint of the range if exclude_end? # For ... ranges that exclude the end while x < self.end # Test with the < operator yield x x += step end else # Otherwise, for .. ranges that include the end while x <= self.end # Test with <= operator yield x x += step end end end # End of method definition end # End of class modification (0..10).by(2) {|x| print x} # Prints "0246810" (0...10).by(2) {|x| print x} # Prints "02468"