豊福@パパイヤです。

>> (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