1

実数で足し算を実行できるようにクラスを変更するプル リクエストを送信しました。Matrix

Matrix[ [25, 93], [-1, 66] ] + 5

Matrixクラスにはメソッドがあり、この+()場合呼び出されます。

また、ユーザーが操作の順序を次のように変更できるようにしてほしい

5 + Matrix[ [25, 93], [-1, 66] ]

Matrix クラスはこのメソッドの操作順序をサポートしているようですが、メソッド*()にこれを実装する方法がわかりません+()

4

2 に答える 2

2

強制は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

于 2014-07-27T19:01:43.700 に答える