中田さん、お答えありがとうございます。

>Vectorを作った後でcomplex.rbがロードされることも考えられるので、
>初期化時点で決定するのは望ましくないような気がします。
ということは、inner_productメソッドの定義のはじめに
@comp = defined?(Complex) if !@comp
といった処理を書くべきでしょうか。

>Complexが有効かどうかなら defined?(Complex) で、Numericに
>conjugateが定義されているかどうかなら 0.respond?(:conjugate) か
>defined?(0.conjugate) あたりで調べたほうがいいと思います。
了解しました。

>Complexにはabs2というメソッドがあるので、Numericにも self*self 
>という形でabs2が定義されていれば
これは、matrix.rbに
class Numeric
  def abs2
    self * self
  end
end
を追加すればよい、ということでしょうか。

以上、よろしくお願いします。

田中 健太(TANAKA Kenta)
論理によって証明し、直感によって考え出す。