強制は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[...]
ます。
Scalar
class は同じファイル内で定義され、独自の一連の演算子 (+
および「-」を含む) を定義します。したがって、行を削除して、ここでコードを強制する必要がありScalar.Raise ErrOperationNotDefined, "+", @value.class, other.class
ます。たとえば、other + self