From: Akinori MUSHA Date: 2009-05-08T21:28:01+09:00 Subject: [ruby-dev:38389] Re: [ruby-cvs:30538] Ruby:r23320 (trunk): * lib/set.rb (SortedSet#add): Do not let an uncomparable object --pgp-sign-Multipart_Fri_May__8_21:28:22_2009-1 Content-Type: text/plain; charset=ISO-2022-JP At Fri, 8 May 2009 09:48:18 +0900, Yusuke ENDOH wrote: > >  ひとまず respond_to?(:<=>) に変更しました。 > > 対応ありがとうございます。動くようになりました。  何よりです。 > >> 変更の理由が「(a<=>b) > 0 のような書き方はしたくな」いという > >> だけなら、せめて 1.9 内は互換性を優先すべきではないでしょうか。 > > > >  なんだか私の個人的なわがままみたいで残念な感じですが、一般に、 > > SortedSet を使った処理において要素同士の比較に < > 演算子を使え > > ない(仮定できない)のは不自然で不便な感じはします。 > > 互換性の話を無視すれば、私もそう思います。 > SortedSet[[1], ["foo"]] とか inspect したら例外になりますしね。 > > # いや、一切型チェックしないで例外の方が Ruby らしいのかな?  そこはバグの発見しやすさと性能のトレードオフですね。今回の ケースでは、要素の追加で全順序集合が保たれるかまではチェック していられないが、比較演算子の定義の有無程度なら妥協可能、と いう落としどころでした。  ところで、もし追加と参照を交互に繰り返すような使い方を主な ターゲットとするならば逐次挿入ソートしていくという実装も有力で、 その場合は挿入時に実際の比較が行われるので追加のコストなしに ある程度のチェックが行われることになります。  いろんな都合が絡んでいておもしろいですね。 -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Fri_May__8_21:28:22_2009-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEABECAAYFAkoEJWYACgkQkgvvx5/Z4e4S7wCfZsADVFIomoW7rpDq5gQDW7Xt weMAoKc5tEjp1t6w0266uzaPMYnc8IYL =ImeA -----END PGP SIGNATURE----- --pgp-sign-Multipart_Fri_May__8_21:28:22_2009-1--