- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:rubyでは比較演算子もメソッドとして書き換えが可)
Rubyの比較演算子のオーバーライドについて
このQ&Aのポイント
- Rubyでは比較演算子(<, >)もメソッドとして書き換えが可能です。
- 具体的には、配列をソートする際に比較が行われるので、この際にカウンターを用いて比較回数をカウントすることができます。
- 詳しいコーディング方法に関しては、Rubyのマニュアルを参考にするか、適切な検索キーワードで検索してみることをおすすめします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
クラス変数を定義します。 単に再定義するには、必要ないですが、 元のメソッドを利用したい場合は、alias しておきます。 #!/usr/bin/ruby # coding: utf-8 class Fixnum @@counter = 0 alias orig_compare <=> def <=>(other) @@counter += 1 orig_compare(other) end def counter @@counter end end a = [3, 5, 4, 2, 1] p a.sort, 0.counter 結果: [1, 2, 3, 4, 5] 7
その他の回答 (1)
- MillenniuM
- ベストアンサー率58% (42/72)
回答No.1
こういう感じでしょうか。 #!/usr/bin/ruby # coding: utf-8 a = [3, 5, 4, 2, 1] @c = 0 p a.sort_by{|e| @c += 1; e}, @c @c = 0 p a.sort{|x, y| @c += 1; x <=> y}, @c 結果: [1, 2, 3, 4, 5] 5 [1, 2, 3, 4, 5] 7
質問者
お礼
MillenniuMさん、ご回答ありがとうございます。 これで知りたかった事は知れたのですが、これで自信の本当の目的は達成できたのですが、 メソッドのオーバライドってどうやるの? って質問としたので、もうすこし質問は開いておかせてください。 しかしながら、とても参考になりました。ありがとうございます。難しく考えてました。
お礼
MillenniuMさん、ご回答ありがとうございました。 大変参考になりました。