From: Tadayoshi Funaba Date: 1998-06-27T18:59:06+09:00 Subject: [ruby-list:8559] Re: hash sort ふなばです。 >ひわだ@現実逃避中 といいます。こんにちは。 こんにちは。僕は頭がよわいんで、よくわかりませんでした。が、ちょっと思っ たことを書いてみます。 >(1) (a[1]<=>b[1])*2 + ... > これは <=> が大概の場合 -1, 0, 1 を返すという経験的事実に基づいている。 これは手を抜かないで -1, 0, 1 に読み換えるようにすればいいのです。ある いは、ひとまず真実そうだということにして議論してもいいと思いますけどね。 そういう方針になってきているはずだと思うし。ですが、論点は乗算するって こととかにあって、整数だったからよかったけど、乗算できないときどうする かってこととかね。 >(2) nonzero? > これは <=> が 0 を返すという仕様に基づいている。 そういういいかたされると、さっぱりわからないんですが、こいつでしたかっ たことは、 `or' のふるまいをうまく利用するために結果を読み換えるという ことです。そういうわけで、これは永井さんの提案のちょっとした修正版といっ ていいでしょう。 >(3) Array#<=> > これは Arrayで定めた(さらにはそのコンテンツで定めた)動作を利用している。 これは Enumerable ってことのほうが重要に思えます。 Ruby スクリプトで同 じような手続きを並べるかわりに、順序のあるものにたいして、手続きを繰り かえす、というふうに読み換えたところが大切だと思います。これは考えてみ ると、うっかり忘れていただけで、もともとあったものなんじゃないかと思え るくらいです、というか、 そう思っています。 利用してるとかじゃなくて、 Array ってそういうもんなんだってね。 >#カードなんとかクラスとかを作っちゃうとか。って既にそういう話ではないか ^^; クラスになっても基本的に同じじゃないかな。 --Tadayoshi Funaba