強制はcoerceメソッドで処理されます。このメソッドは、指定された演算子/メソッドが再試行される 2 つの要素を返します。次のようにMatrix定義します。coerce
def coerce(other)
case other
when Numeric
return Scalar.new(other), self
else
raise TypeError, "#{self.class} can't be coerced into #{other.class}"
end
end
ただし、オペランドの順序を変更するのではなく、数値をScalarクラスに変換することに注意してください。したがって、 ruby see5 + Matrix[...]は を実行しScalar.new(5) + Matrix[...]ます。
Scalarclass は同じファイル内で定義され、独自の一連の演算子 (+および「-」を含む) を定義します。したがって、行を削除して、ここでコードを強制する必要がありScalar.Raise ErrOperationNotDefined, "+", @value.class, other.classます。たとえば、other + self