From: Tadayoshi Funaba Date: 2000-07-12T00:21:48+09:00 Subject: [ruby-dev:10290] Re: date/date2 ふなばです。 At 2000-07-11T01:54:11+0900 (2451736.20429JD), matz@netlab.co.jp (Yukihiro Matsumoto) wrote: matz> |date.rb を、ちょっとだけ date.rb よりにした date2.rb で、置き換えて、 matz> |date2.rb は、互換性のために残す、ということになるわけですか。date2.rb matz> |の残しかたですけど、具体的に考えてます? ほとんど同じものを2つ用意する matz> |か、ひとつで済ませるようにできるのか。 matz> まだ考えてません。差はDate::newだけのはずなんで、あるいは 今のところ、僕としては、date2 の new を new3 の別名にしてもよい、とい う考えになりつつあります。しかし、やはり、それはよくない、ということに なれば、僕としては、つぎのようにしたいと思います。 date2 で、alias_method :new1, :new と、します (いずれにしろ、これはや ります)。そして、date2 で、new しているところを new1 とするようにしま す。date2.rb のほうは基本的にこれだけ。date.rb のほうは、たとえば、つ ぎのようにします。 require 'date2' class Date class << self def new(y=1, m=1, d=1) new3(y, m, d, ENGLAND) end end end 理由は、 o date2 は date2 でありつづけるわけだから、date2.rb は date2 でないと いけない。別段、date2 の側には、変更する理由はない。 date2.rb を date.rb という名前で参照できるのは、あまり抵抗がありませ んが、date.rb が date2.rb になって、date2.rb が date2 でなくなるのは、 ちょっとズイマーである。 o こうするほうが互換性が高い。そして、date.rb にならば、とにかく、気が 済むまで、メソッドを追加するなりなんなりし放題である。たとえば、以下 のようなものも用意できる。 class Date def name_of_month() MONTHNAMES[mon] end def name_of_week() DAYNAMES[wday] end end # ちなみに、やはり、date2 としては、上記、もしくは上記のようなメソッド # をもつことはないと思います。date2 パッケージは、strftime を持ってい # ますし。 これらを互換性のためだけに用意するならば、警告をだすための準備もあって いいでしょう。 一方で、date2 のほうでも、new について警告することもできます。そうして おいて、しばらくあとで、本当に統合という方法もあるでしょう。最終的に、 完全に統合するのかどうか、それは何時か、ということも考えておかなといけ ないのかな。 此の際そんな七面倒臭いこたあナシにしようぜ、ということなら、ひとつ目の 案を実行することになると思うです。 ふなば ただよし