2

特定のクラスがCあり、いくつかの数学演算子をオーバーロードしたいと考えています。

+i*、およびを既にオーバーロードし/ているので、次のようなことができます

a = C.new
b = C.new
a + b
a + 2
a + 2.0

最後の 3 つのケースを処理するために、オペランドの型を体系的にテストしていCます。私の最初の質問は、それを行う正しい方法ですか?FixnumFloat

次は私もできるようになりたいです

2.0 + A

どうすればいいですか?ある種の変換を提供する必要がありますか? この 2 つの問題は同じ方法で解決できますか?

4

1 に答える 1

4

「ルビー演算子のオーバーロードに関する質問」に対する答えは、is_a?coerce.

あなたの最初のポイントに関して。Ruby での通常のアプローチはrespond_to?、型をチェックするのではなく、可能な場合は使用することです。なんらかの理由で特にタイプを確認する必要がある場合は、使用するis_a?のが正しい方法です。

于 2012-06-19T23:50:04.387 に答える