たけ(tk)です。

  古代史とか遺伝子(mtDNA)とか相対性論とか・・あちこちでお世話になってお
ります。

[ruby-list:33688] Re: when.exe の Ruby 化 (Re: newdate) にて 
Takashi SUGA <suchowan / box.email.ne.jp> さん 曰く:
》須賀です。昨日の議論を反映して、仕様案(*)を改版しました。
》
》(*)http://www.asahi-net.or.jp/~dd6t-sg/DateClass.html

 ちょっとルーズな趣味なのですが、

tm = Time.now
dt = Date.today

YADate.new 2002 , 12 , 31 , ..  # Integer
YADate.new "2002/12/31"         # String
YADate.new 2452639.0            # Float .. jd
YADate.new tm                   # Time
YADate.new dt                   # Date

というように、「日付になりそうなもの」であれば何でも new で受け付けるよ
うにはできないでしょうか?。

class YADate
  attr cal,true
  def initialize v1 , *args
    case v1
    when Integer
      p "Integer"
    when String
      p "String"
    when Float
      p "Float"
    when Time
      p "Time"
    when Date
      p "Date"
    else
      p "unknown type"
    end
  end
end

tm = Time.now
dt = Date.today

p YADate.new 2002,12,31
p YADate.new "2002/12/31"
p YADate.new 2452639.0
p YADate.new tm
p YADate.new dt
 
 −−

 それと、カレンダーを特定して YADate のインスタンスを作る方法として、

 SomeCalendar.new_date( *args )
 SomeCalendar#new_date( *args )

  ya_date1 = SomeCalendar.new_date "2002/12/31"

  cal = SomeCalender.new
  ya_date2 = cal.new_date( 2002,12,31 )

というのはどうでしょうか?。

 クラスメソッド(SomeCalendar.new_date)の場合はそのカレンダーのデフォ
ルトのオブジェクトを使用する。

 インスタンスメソッド(SomeCalendar#new_date)の場合にはそのオブジェク
トを作成された YADate の cal にセットする。

class Calendar
  def new_date( *args )
    obj = YADate.new( *args )
    obj.cal = self
    obj
  end
  @@default_calendar = nil
  def Calendar::default_calendar
    @@default_calendar = Calendar.new unless @@default_calendar
    @@default_calendar
  end
  def Calendar::new_date( *args )
    Calendar.default_calendar.new_date( *args )
  end
end

obj = Calendar.new_date "2002/12/31"
p   obj  ## #<YADate:0xff7ef8 @cal=#<Calendar:0xff7f70>>

cal = Calendar.new
obj = cal.new_date 2002,12,31
p obj

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武