けいじゅ@日本ラショナルソフトウェアです.

なんか, 私がいない間にだいぶ進んでいますが...

In [ruby-math :00483 ] the message: "[ruby-math:00483] Re: NArray#==
", on Jun/27 08:40(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>|assert_equal の他に具体的な問題がありますか?という意図でした。
>|一応 NArrayでも==は等しいという意味です。返す物が違いますけど。
>
>今の仕様だと == は常に真を返すわけで、それは外見から期待され
>る動作とはまったく違うと思います。

ほそく. ==とHashで使うeql?が統合しようかって話もあるみたいですし, そうなっ
たらこの仕様は確実に破錠します.

>|例えば Array と NArray とでは、+ メソッドの意味が違います。
>|(Arrayでは配列の連結、NArrayでは要素の加算)
>| + を使うな add にせよ、といわれたら、使う気はなくなります。
>
>StringとNumericでは + メソッドや << メソッドの意味が違うとか
>は実際にあるので絶対に変えてはいけないとまでは言いません。要
>は程度問題だと思うのです。

補足. これはメソッドの起源と言う概念を用いると全然おかしくないです. 

定義は...

\term{メソッドの起源}{origin of method}とは, 同名のメソッドをクラス継承
の中をたどったときその最上位のメソッドのことです. いいかえると, 同じ意味
を持ったメソッドの系列の内で最も最上位にあるメソッドのことです. 逆にいえ
ば, メソッドの起源が一致すれば, それらメソッドは同じ意味を持つと考えるこ
とができます.

です. 

Array#+とString#+とNumeric#+は, それぞれメソッドの起源が異なっています.
==はメソッドの起源はObject(Kernel)#==にあるのでそのサブクラスはすべて同
じ意味を持つのが基本で, そうじゃないなら起源を立ち切るだけの理由が必要で
しょう.

__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---