これつぐです。


[ruby-list:17731]
> これつぐです。

> いっそのこと Array#sort の仕様をかえるというのはどうでしょう。

うーむ。
誰からも反応がありませんね。
何か致命的な欠陥があるのでしょうか。
私が認識している利点、欠点は以下のとおりです。


利点
  ・sort{|a, b| a... <=> b... } のように同じようなことを二回書かなくてすむ。
  ・比較のたびに評価しないので多分速い。
  ・sort{|a, b| (a <=> b).nonzero? || ... } よりもわかりやすく(?)書ける。

欠点
  ・互換性がない。
  ・sort{|a, b| a.method1 <=> b.method2} のような非対称な比較ができない。
  ・いちいち Array を作ってしまう。


互換性がないのは確かに致命的ですが、
適当な別の名前にする手もあります。

非対称な比較ができないというのも、
そのような比較による「sort」は通常の意味のソートにならないと思うので、
逆に利点といえるかもしれません。

少なくともオリジナルよりも大きな Array が、
そして場合によっては巨大な Array ができてしまう気がするのですが、
その影響についてはよくわかりません。
もしかしたらメモリを馬鹿食いするかも?

sort に「ソート」をさせたいのなら a,b に違う変換をすることは少ないと思います。
そしてもし絶対にないのならば、
同じことを二度書かなければいけない今の仕様には無駄があることになります。

(...).nonzero? || ... よりわかりやすいかどうかには異論があると思いますが、
私はわかりやすいです。
少なくとも短く書けます。


で、
どんな形にせよRuby本体に採用してもらえれば個人的にはうれしいです。
需要は少なくないと思うのですが……。

# 自分の書いたコードには filter{...}.sort!.filter{...} が結構あったもので。