From: matz@... (Yukihiro Matsumoto) Date: 2001-03-23T14:01:46+09:00 Subject: [ruby-list:28928] Re: オペレータの再定義 まつもと ゆきひろです In message "[ruby-list:28920] オペレータの再定義" on 01/03/23, EMOTO Masahiko writes: |Ruby 以外のオブジェクト指向型言語では |'+','*' といった中間演算子の再定義と |いうのはどのように実現されているもの |なのでしょうか? Rubyのように積極的に逆方向は支援しないのが一般的のようです。 少なくとも、Eiffel, Smalltalkなどはそうです。Smalltalkには数 にGenericityというものがあってそれが大きい方に変換するという キマリがあります。 Pythonはクラスオブジェクトに対する演算子はメソッドに変換され るのですが、たとえば クラスオブジェクト + 値 は __add__ に、 基本型 + クラスオブジェクト は __radd__ に変換されます。クラスオブジェクトでない値がある Pythonはしばしば不便なのですが、この点だけは便利ですね。 そして、この問題に対してもっとも強力な解を持っているのは、 DylanやCLOSのようなmulti methodを持つ言語ですね。 (defmethod + ((rational x) (int x)) ... ) のように引数に型を指定すれば、その組み合わせに対して適切なメ ソッドを呼んでくれます。便利。 もちろん、これにもイヤな点があってRubyでは採用してないんです けどね。 まつもと ゆきひろ /:|)