From: Shin-ichiro HARA Date: 2003-08-05T17:18:42+09:00 Subject: [ruby-dev:21138] Re: Rational 公開しました。 原です。 >まつもと ゆきひろです >| p Foo.new.class #=> Foo >| p (Foo.new + Foo.new).class #=> Array >| >|となるんですね。基本的に組み込みクラスは継承は考えられてないので >|しょうかね。 > >そんなことはないです。明らかにレシーバが優先である操作につい >ては、レシーバと同じのクラスのオブジェクトを返すようにしてい >ます。 > > ruby -e 'class Fooしかし、配列の結合の場合は「レシーバに引数の内容を追加したも >のを返す」とは考えず、「配列内容の結合」と考えて単なるArray >を返します。 ふむー、そこの感覚が分からないです。加法はやはりその系で閉じる のが自然ではないでしょうか。 で、試しに Rational をそのように作ってみました。すると、コード としてはやや不自然に、また、1%ぐらいスピードも落ちてしまいま した。 ちょっと話はそれるけど、前から文字列や配列の結合は + ではなくて、 * であるべきではないか、との意見が有りましたが、それの有効な反論 を思いつきました。つまり加法は系で閉じるが乗法は閉じないから加法 が正しい、というわけ。例えば 3cm + 3cm = 6cm 3cm * 3cm = 9cm**2 とかね。