[#34204] 「プログラミング Ruby 」 p.257 defined? はメソッド? — Noritsugu Nakamura <nnakamur@...>

15 messages 2002/03/05
[#34205] Re: 「プログラミング Ruby 」 p.257 defined? はメソッド? — nobu.nakada@... 2002/03/05

なかだです。

[#34244] しぶらぐっ議事録。 — rubiben <ozaki@...>

48 messages 2002/03/08
[#34250] Re: しぶらぐっ議事録。 — Minero Aoki <aamine@...> 2002/03/09

あおきです。

[#34246] Re: しぶらぐっ議事録。 — rubikitch <rubikitch@...> 2002/03/08

From: rubiben <ozaki@ruby-lang.org>

[#34448] 文字コード混在スクリプトの実行 — Noritsugu Nakamura <nnakamur@...>

14 messages 2002/03/16

[#34453] カレンダー文字列を作るメソッド — Take_tk <ggb03124@...>

たけ(tk)です。

13 messages 2002/03/16

[#34534] スクリプティング言語における GPL — Taku Nakajima <tnakajima@...>

中島@ブレーンです。

26 messages 2002/03/21

[#34552] Re: 1.7 に関して — "井上 浩一" <kyoui32@...>

井上です。

22 messages 2002/03/22
[#34556] Re: 1.7 に関して — "U.Nakamura" <usa@...> 2002/03/22

こんにちは、なかむら(う)です。

[#34590] Ruby FAQ (Re: 1.7 に関して) — TAKAHASHI Masayoshi <maki@...> 2002/03/22

高橋征義です。

[#34570] cgi.rb+ イテレータ — FUJIOKA Takeyuki <fujioka@...>

藤岡です。

15 messages 2002/03/22

[#34676] 安心できる Marshal と、 Ruby バージョンの検査法 — MALTA Koji <malta@...>

丸田と申します。

62 messages 2002/03/30
[#34678] Re: 安心できる Marshal と、 Ruby バージョンの検査法 — Koji Arai <JCA02266@...> 2002/03/31

新井です。

[#34682] Ruby バージョンの検査法 — MALTA Koji <malta@...> 2002/03/31

丸田です。 MarshalとRUBY_VERSIONの話題を分離します。

[#34694] Re: Ruby バージョンの検査法 — WATANABE Hirofumi <eban@...> 2002/04/01

わたなべです。

[#34695] Re: Ruby バージョンの検査法 — shukaku@... 2002/04/01

At Mon, 1 Apr 2002 16:06:23 +0900,

[#34697] Re: Ruby バージョンの検査法 — WATANABE Hirofumi <eban@...> 2002/04/01

わたなべです。

[#34714] Re: Ruby バージョンの検査法 — MALTA Koji <malta@...> 2002/04/01

丸田です。

[#34719] Re: Ruby バージョンの検査法 — HIDAKA Takahiro <cv8t-hdk@...> 2002/04/02

 ひだかです。

[#34738] Re: Ruby バージョンの検査法 — MALTA Koji <malta@...> 2002/04/02

丸田です。

[#34743] Re: Ruby バージョンの検査法 — matz@... (Yukihiro Matsumoto) 2002/04/02

まつもと ゆきひろです

[#34748] Re: Ruby バージョンの検査法 — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/04/03

なひです。

[#34760] Re: Ruby バージョンの検査法 — Koji Arai <JCA02266@...> 2002/04/03

新井です。

[#34765] Re: Ruby バージョンの検査法 — "U.Nakamura" <usa@...> 2002/04/04

こんにちは、なかむら(う)です。

[#34776] Re: Ruby バージョンの検査法 — Tanaka Akira <akr@...17n.org> 2002/04/04

In article <20020404095542.7155.USA@osb.att.ne.jp>,

[#34681] 書籍に関する質問です — Nobuhide Kanagawa <nobuhide@...>

こんにちわ。

17 messages 2002/03/31

[ruby-list:34486] Re: when.exe の Ruby 化 (Re: newdate)

From: Takashi SUGA <suchowan@...>
Date: 2002-03-18 11:17:12 UTC
List: ruby-list #34486
須賀です。どうもコメントありがとうございます。

>  When はちょっと漠然としすぎじゃないでしょうか。こういうのは
> ruby-talk に振ってみれば一発でその違和感を分かりやすく説明して
> くれると思います。投げてみてはいかがでしょうか。
When.exe という言葉はもう10年以上使っているので、自分では客観的に判断で
きなくなっているのだと思います。ただ、ruby-talk ないし comp.lang.rubyに
投げるには、それなりにドキュメントを英語にしてからでないと厳しいでしょう
(日本語ですら話がかみ合わない場合があるわけだし)。

>  私が今思いつくのは、クラス階層を導入して Calendar::Date とか
> Date::Extended みたいにするのが分かりやすそう、ということくらい。
> 標準クラスではほかに例がなさそうなのでボツかな?
文法的な制約として、autoload できるのは、:: のつかない定数のみである
という点があるので、Calendarクラスのサブクラスをクラス階層の中にいれ
ることはできません。そのことが盲点になっていて、Date そのものには、
その種の制限がないことに思い至っていませんでした。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 when.rb  〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
class Date
  class Extended < Date
    def Extended.return_date_or_extended(date)
      (諸々のメソッドの終わりで日付オブジェクトを返すときに呼ばれて)
      拡張日時オブジェクト date の date.cal が Civil で、date.zone が
      固定タイムゾーンのときは date を Date クラスのオブジェクトに
      変換して返す。どちらかの条件が成立しないときには、拡張日時オブ
      ジェクトをそのまま返す。既存のDateから継承されているか、newdate
      から継承されているかでタイムゾーンの有無が変わるので、どちらから
      継承されても良いように配慮が必要かもしれません。
    end
    ...

  end # of Date::Extended Class definition


  ## Additions to Date Class

  def Date.utc(暦法オブジェクトまたは文字列, y, m, d,...)
    DateクラスまたはWhenクラスのインスタンスを作って返す
    暦法オブジェクトまたは文字列が省略されるケースは Dateクラスで閉じるので、
    本メソッドで暦法指定を省略可とする必要がないことに気づきました。
    日付が正しくない場合は例外を発生する
   (タイムゾーンはグリニジ標準時)
   date = ...
   Date::Extended.return_date_or_extended(date)
  end

  def Date.local(暦法オブジェクトまたは文字列, y, m, d,...)
    Dateクラスまたは拡張日時クラスのインスタンスを作って返す
    日付が正しくない場合は例外を発生する
   (タイムゾーンはローカル)
   date = ...
   Date::Extended.return_date_or_extended(date)
  end

  def Date.when?(暦法オブジェクトまたは文字列, y, m, d,...)
    Dateクラスまたは拡張日時クラスのインスタンスを作って返す
    日付が正しくない場合は nil を返す
   (タイムゾーンはローカル)
   date = ...
   Date::Extended.return_date_or_extended(date)
  end

  def to_date_extended Dateオブジェクトを拡張日時オブジェクトに変換して返す end
  def new_calendar(cal)  to_date_extended % cal    end; alias_method :%, :new_calendar
  def new_zone(zone)     to_date_extended | zone   end; alias_method :|, :new_zone
  def new_period(period) to_date_extended / period end; alias_method :/, :new_period
  def [](key) # 暦注を参照するメソッド
    strftime で %[暦注] という書式を想定すると、整合性から暦注参照は[]メソッドがよい。
    to_date_extended[key]
  end

  def jdn ... end # これらの計算は Date クラスで閉じる。一部は既定義のものの別名
  def jdf ... end #   〃
  def sd  ... end #   〃
  def sdn ... end #   〃
  def sdf ... end #   〃

  alias_methld :+!, :+
  def +(other)
    return +!(other) unless other === String
    return to_date_extended + other
  end 
    
  alias_methld :-!, :-
  def -(other)
    return -!(other) unless other === String
    return self.to_date_extended - other
  end 
end  
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
のよう Extended という名前にして、Date で囲ってやればユーザからみて
違和感がなさそうです。これで少し進めて、ドキュメントが整ってきたら、
comp.lang.ruby にも振ってみたいと思います。

Calendarクラスのサブクラスの名前に今は「謎の」0,1,2がついていますが、
これも何らか原則を建てて見直したいと思います。

-- 
////////// 須賀 隆 ///////////////////////// SGB02104@nifty.com ////////
// http://www.asahi-net.com/~dd6t-sg/ mailto:suchowan@box.email.ne.jp //

In This Thread