From: toyofuku@... Date: 1999-08-17T15:32:02+09:00 Subject: [ruby-dev:7702] Re: [ruby-ext:00382] New coerce scheme 豊福@パパイヤです。 >> (i) A は >> a op b >> が計算できないときは >> b.(左側からのop)(a) >> として B に完全に任す。 >> >> (ii) B に >> def (左側からのop)(other) >> が定義されていればそのメソッドで処理される。 >> >> (iii) それがないときは >> def 左側からの一般的演算用処理(op, other) >> のメソッドで処理される。 >> (このメソッドが従来の coerce に対応し self と other >> から a' と b'を計算して a' op b' で結果を出したりする) obj.precision(klass) をこれにあてはめたらどうなるか 考えたんですが、(左側からのprecision)を induced_from (って名前でしたっけ?)と書けば、 (i) obj は obj.precision(klass) が計算できないときは klass.induced_from(obj) として klass に完全に任す。 (ii) klass に def induced_from(other) が定義されていればそのメソッドで処理される。 となって、以前ごとけんさんが precision について提案して いた方法とほぼ同じになっているのではないかと思います。 原さん > ただ、(ii) があれば (iii) はほとんど必要ないですよね。前に > 必要になる例をあげていただいた覚えがありますが。 私覚えてないんですがどんな例でしたっけ。 >> 「左側からのop」をどう表現するのかとか、それがないとき >> どう (左側からの一般的演算用処理)(op, other) に変換するのか >> とかは全然考えてないです。 > > 字句解析上可能かどうかわからないのですが、2項演算子の後ろ > に ! を付けて反対にしたらどうでしょう。 二項演算的なものには div などのように記号じゃないものも ありそうですから、それに ! をつけると div! のように破壊的 メソッドっぽくなりますね。 --- 豊福@パパイヤ unbound@papaya.juice.or.jp toyofuku@juice.or.jp