Rubyでは、多くのcoerce()ヘルプを次の方法で実行できるようです。
def coerce(something)
[self, something]
end
つまり、いつ
3 + rational
が必要な場合、Fixnum3
はRationalの追加を処理する方法を知らないため、rational.coerce(3)を呼び出してRational#coerceにヘルプを要求し、この強制インスタンスメソッドは呼び出し元に次のように通知します。
# I know how to handle rational + something, so I will return you the following:
[self, something]
# so that now you can invoke + on me, and I will deal with Fixnum to get an answer
では、ほとんどのオペレーターがこのメソッドを使用できるが、(a --b)!=(b --a)の状況では使用できない場合はどうなるでしょうか。coerce()は、それがどの演算子であるかを認識し、それらの特殊なケースを処理するだけで、(a op b)==(b op a)である他のすべてのケースを処理するために単純な[self、something]を使用できますか?(opは演算子です)。