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

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

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

あおきです。

[#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:34308] Re: when.exe の Ruby 化 (Re: newdate)

From: Takashi SUGA <suchowan@...>
Date: 2002-03-11 05:18:24 UTC
List: ruby-list #34308
須賀です。

> Yet Another Date クラスの名前をそろそろ決めたいのですが、When だと
> 予約語と紛らわしいから、やはりまずいですよね。 

その後考えたのですが、まずいのは「ユーザが直接'When'という名前を使わ
ねばならないとすれば予約語と紛らわしい」ということだと思います。


When クラスを標準添付の Date クラスのサブクラスにして、when.rbを

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
class Date
  def Date.local([暦法名,]y,m,d,...)
    DateクラスまたはWhenクラスのインスタンスを作って返す
   (タイムゾーンはローカル)
   date = ...
   When.return_date_or_when(date)
  end

  def Date.utc([暦法名,]y,m,d,...)
    DateクラスまたはWhenクラスのインスタンスを作って返す
   (タイムゾーンはグリニジ標準時)
   date = ...
   When.return_date_or_when(date)
  end

  def to_when DateオブジェクトをWhenオブジェクトに変換して返す end
  def new_calendar(cal)  to_when % cal    end; alias_method :%, :new_calendar
  def new_zone(zone)     to_when | zone   end; alias_method :|, :new_zone
  def new_period(period) to_when / period end; alias_method :/, :new_period

  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_when + other
  end 
    
  alias_methld :-!, :-
  def -(other)
    return -!(other) unless other === String
    return self.to_when - other
  end 
end

class When < Date
  def When.return_date_or_when(date)
    (諸々のメソッドの終わりで日付オブジェクトを返すときに呼ばれて)
    When オブジェクト date の date.cal が Civil で、date.zone が
    固定タイムゾーンのときは date を Date クラスのオブジェクトに
    変換して返す。とちらかの条件が成立しないときには、When クラス
    のオブジェクトをそのまま返す。
  end
  ...

end  
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
と定義して、date.rb の後からインクルードするようにすれば、

1. ユーザが When という名前を直接使うことはまずない。
2. それにもかかわらずユーザは yet another date の全機能を使える。
   (現状でも遅い速度がさらに若干低下する,しかしもともと五十歩百歩)
3. when.rb の require(実際には大部分の機能は autoload になっているので必要にな
   るまでロードされない) と +,- 演算でのString型判定のわずかなオーバーヘッドの
   増加を除けば、既存の date クラスの機能のみを使う分には速度は低下しない。
   もちろん when.rb を使わなければ、何の関係もない。
4. 将来 標準添付の date クラスのメソッド名が変更になっても、名前が衝突しない限
   り when.rb には影響がおよばない。

が実現できます。

yet another date のクラス名は When でも良いでしょうか?
-- 
////////// 須賀 隆 ///////////////////////// SGB02104@nifty.com ////////
// http://www.asahi-net.com/~dd6t-sg/ mailto:suchowan@box.email.ne.jp //

In This Thread