I'm in the process of trying to understand how to generate ranges, and I'm having trouble understanding what each method does within the following class (Source):
Code Ruby:
class Xs                # represent a string of 'x's
     include Comparable
     attr :length
     def initialize(n)
       @length = n
     end
     def succ
       Xs.new(@length + 1)
     end
     def <=>(other)
       @length <=> other.length
     end
     def to_s
       sprintf "%2d #{inspect}", @length
     end
     def inspect
       'x' * @length
     end
   end
 
   r = Xs.new(3)..Xs.new(6)   #=> xxx..xxxxxx
   r.to_a                     #=> [xxx, xxxx, xxxxx, xxxxxx]
   r.member?(Xs.new(5))       #=> true

The two I'm having particular trouble understanding are the succ & inspect methods.