From: Akinori MUSHA Date: 2009-05-05T06:07:28+09:00 Subject: [ruby-dev:38373] Re: [ruby-cvs:30538] Ruby:r23320 (trunk): * lib/set.rb (SortedSet#add): Do not let an uncomparable object --pgp-sign-Multipart_Tue_May__5_06:07:44_2009-1 Content-Type: text/plain; charset=ISO-2022-JP At Mon, 4 May 2009 23:44:22 +0900, Yugui wrote: > Yuguiです。 > > On 5/1/09 4:46 PM, knu@ruby-lang.org wrote: > > knu 2009-05-01 16:46:23 +0900 (Fri, 01 May 2009) > > > > New Revision: 23320 > > > > http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23320 > > > > Log: > > * lib/set.rb (SortedSet#add): Do not let an uncomparable object > > in. [Bug #118] > > この修正で引数のクラスがComparableをincludeしていることを要請しています > けれども、respond_to?(:<=>) だけ要請した方がよいんではないでしょうか。  SortedSet なのだから sort できれば(<=> メソッドがあれば)十分、 というのは有力な論点ですね。 > is_a?(Comparable)というのはインターフェースではなく実装の話だと思うので。  そこはあまり分離できない気がします。 <=> を定義しながら include Comparable せずに自前で < > 等を定義することは現実的にはほとんど ないでしょうし、 Array が <=> を定義しつつもあえて include Comparable していないのは、便宜上ソートは許すが、一般に比較できる という性質については否定したいからですよね。  SortedSet はいくつかの機能追加と最適化を予定しており、その中で 要素のチェックについても見直します。実際のところ、あまり (a<=>b) > 0 のような書き方はしたくなく、 < > 等を仮定するためには is_a?(Comparable) が手っ取り早いのですが。 -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Tue_May__5_06:07:44_2009-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEABECAAYFAkn/WSAACgkQkgvvx5/Z4e4B0wCeJL6mvCP2DOJhuBuy9iQKf5Pm WMYAmwY++o5yNsRw0/UA28eFXLES443s =CkXj -----END PGP SIGNATURE----- --pgp-sign-Multipart_Tue_May__5_06:07:44_2009-1--