Enumerableにeach_sliceってメソッドがあったような気がしてたんだけど、require 'enumerator'が必要だったのね。前回のtoRubyの課題の回答、ERBなんかでHTML化するのに都合がいいように、わざわざ週ごとのループにしてみた。
require 'enumerator' require 'date' def cal(y, m) head = Date.new(y, m, 1) head -= head.wday tail = Date.new(y, m, 1) >> 1 tail += (6 - tail.wday) (head..tail).each_slice(7) do |w| yield(w.collect {|d| d.month == m ? d.day : nil}) end end t = Date.today cal(t.year, t.month) do |w| puts w.collect {|d| d ? " %2d" % d : " --"}.join("") end