[自定义区间-Range]书里的例子

class ChineseNumber
 Numbers = ["","","","","","","","","",""]
 attr :chinese_number

 def initialize(value)
    if Numbers.include?(value)
       @chinese_number = value
    else
       raise "数字不正确"
    end
 end

 def to_num    #转化为整数
   Numbers.index(@chinese_number)+1 if @chinese_number
 end

 def to_s
   @chinese_number
 end

 def succ    #返回序列中的下一个对象    (Range类必须要的方法)
   raise(IndexError,"超出了数字范围") if self.to_num>=10
   ChineseNumber.new(Numbers[self.to_num])
 end

 def <=>(other)    #比较两个对象的大小 (Range类必须要的方法)
   self.to_num <=> other.to_num
 end
end

def ChineseNumber(val)   #用来创建的工具方法
  ChineseNumber.new(val)
end

one = ChineseNumber("")
four = ChineseNumber("")
puts "#{one} => #{one.to_num}"
puts "#{one} 的下一个是 #{one.succ}"

range = one..four
puts range.include?(ChineseNumber(""))
range.each{|i| puts i }
原文地址:https://www.cnblogs.com/laoquans/p/3183942.html