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