In message "[ruby-list:15264] 年月を範囲でうまく扱うには?"
    on 99/07/06, Yukihiko Eda <yuki-e / geocities.co.jp> writes:
>199701〜199912といった、年月を範囲として扱いたいのですが、
>こういうときは、どうすればスマートでしょうか?

大した手間でもなさそうだし、年月のクラスを作っちゃうのは
どうでしょうか??

-- gotoken

class Month include Comparable Monthtag = [ "January","February","March","April", "May", "June","July", "August", "September", "October", "November", "December" ] def initialize(y, m) unless y.kind_of?(Integer) && m.kind_of?(Integer) && 1..12 === m raise ArgumentError.new end @y = y @m = m end def +(o) a = (@m + o) Month.new(@y + a/12, a%12) end def -(o) a = (@m + o) Month.new(@y - a/12, a%12) end def succ self + 1 end def inspect Monthtag[@m - 1] + " #{@y}" end def to_s Monthtag[@m - 1] + " #{@y}" end def <=>(o) @y * 100 + @m <=> o.y * 100 + o.m end attr_reader :y, :m end if __FILE__ == $0 mrange = Month.new(1997,1)..Month.new(1999,12) for i in mrange p i end end