るびきちです。

coerce について考えてみました。
1、自分が知っているクラスについては自分のクラスで計算する。
2、知らないクラスは相手のクラスに型変換をお願いし、再計算。
となりますが、以下のメソッドを定義して、 coerce を置き換えてみても
うまく動くようです。
どうしても、型変換のところは coerce に任せた方が
キレイじゃないかなと思ったのです。
これの良いところは一部でこの方法を採用しても、
「現行の coerce architecture に影響を及ぼさない」ことです。

coerce0 では、自分の知らない型が来たら例外を発生して、
rescue で拾って相手のクラスに型変換をお願いします。
自分の知ってる型なら変換して返します。

行列みたいにひねくれたクラスでなければそれなりに使えるかなと思っています。
知っているクラスをいちいち演算子メソッドで型変換してると、
特に Ruby C でプログラミングするとき、かなりウザイです(><)
実際、「知っているクラスは演算子メソッド内でそれなりに計算」と
「知っているクラスは自分のクラスの coerce で型変換をお願いして再計算」
とはあまり変わらないような・・・

class MM
  def coerce0(other)
    begin
      x, y = self.coerce other
    rescue
      y, x = other.coerce self
    end
  end

  def +(other)
    case other
    when MM
      MM 同志の演算
    else
      x, y = self. coerce0 other
      x + y
    end
  end
end

るびきち☆