kind=defined
names=coerce
visibility=public

--- coerce(other)    -> [Numeric]

自身と other が同じクラスになるよう、自身か other を変換し [other, self] という配列にして返します。

デフォルトでは self と other を [[c:Float]] に変換して [other, self] という配列にして返します。
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
以下は [[c:Rational]] の coerce のソースです。other が自身の知らない数値クラスであった場合、
super を呼んでいることに注意して下さい。

  # lib/rational.rb より
 
  def coerce(other)
    if other.kind_of?(Float)
      return other, self.to_f
    elsif other.kind_of?(Integer)
      return Rational.new!(other, 1), self
    else
      super
    end
  end

数値クラスの算術演算子は通常自分と演算できないクラスをオペランドとして受け
取ると coerce を使って自分とオペランドを変換した上で演算を行います。
以下は [[c:Rational]] の + メソッドを一部省略したものです。
引数が自身の知らない数値クラスである場合、引数の coerce により自身を変換してから
+ 演算子を呼んでいます。

  # lib/rational.rb より
  
  def + (a)
    if a.kind_of?(Rational)
      # 長いので省略
    elsif a.kind_of?(Integer)
      # 長いので省略
    elsif a.kind_of?(Float)
      Float(self) + a
    else
      x, y = a.coerce(self)
      x + y
    end
  end

@param other オペランドを数値で指定します。

