原です。

>   豊福@パパイヤです。

>   で、どうなって欲しいかですが、思いつきの案を書きます。
> 
> (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' で結果を出したりする)

この案はかなり納得のいくアイデアです。

>   これは以前石塚さんの説明にあった左側からの演算用メソッド
> の話と、引数にopを含む新coerce案を合わせたようなものになっ
> てます。

ただ、(ii) があれば (iii) はほとんど必要ないですよね。前に
必要になる例をあげていただいた覚えがありますが。

>   「左側からのop」をどう表現するのかとか、それがないとき
> どう (左側からの一般的演算用処理)(op, other) に変換するのか
> とかは全然考えてないです。

字句解析上可能かどうかわからないのですが、2項演算子の後ろ
に ! を付けて反対にしたらどうでしょう。で、Numeric の様な基底ク
ラスで +(other) の定義を other +! self にし、+!(other) の定義を
a, b = other.coerce(self, :+!); b + a; みたいにしておきます。

サブクラスは、知らない相手に対する + や +! は super して、さら
に coerce は再定義するという形で拡張していく訳です。