Dateのサブクラスを作成したいと思います。次のようにこれについて行くだろう日の実装の特異性により、非瘢痕化Date.newが初期化を呼び出さないのはなぜですか?
正常で健康な、若いrubyist、:
require 'date'
class MyDate < Date
def initialize(year, month, day)
@original_month = month
@original_day = day
# Christmas comes early!
super(year, 12, 25)
end
end
そして、最も期待されるようにし、それを使用するために進んで...
日::新しい方法は、実際に日にエイリアス::市民、ない 史上コール初期化を行うことである。require 'my_date'
mdt = MyDate.new(2012, 1, 28)
puts mdt.to_s
...事実だけで二重交差します、この場合、最後のコードは、 "2012-12-25"の代わりに "2012-01-28"を出力します。
親愛なるRubyコミュニティでは、wtfはこれですか?
それはを無視するように、新しいをエイリアシングのためのいくつかの非常に良い理由があるがを初期化し、その結果、任意の常識とクライアントのプログラマの精神的健康に関係?
? –
代替手段はありますか? civilizeをinitializeから呼び出すと、必要のないオブジェクトが割り当てられます。 – pguardiario
同じ方法でオブジェクトを割り当てて初期化するのは、意味的に間違っているようです。つまり、「市民」が事実上の「新」であれば、結局は「初期化」と呼ぶのはなぜですか?これは 'Date'の純粋な形式であるかもしれませんが、実装の詳細を実際に掘り下げる必要なしにクラスを拡張することができます。だから私は、「市民」から「新」へのエイリアス決定がなぜなされたのだろうと、私は疑問に思った。 – jst