かんだです。 Re the message of ``[ruby-list:17674] Re: <=>''... WATANABE Hirofumi <Hirofumi.Watanabe / jp.sony.com>: > わたなべです. > > そもそも初めて > a.to_i <=> b.to_i || a.to_i <=> b.to_s > を見てすぐに意味がわかるかなあ? 僕は qsort でも毎回確認するくらいなんで、ダメダメですな(^^; 比較演算なら返り値は GREAT,EQUAL,LESS がいいなぁ。 Comparable::GREAT = 1 Comparable::EQUAL = 0 Comparable::LESS = -1 || でつなげたいんなら、クラスを用意するか。 module Comparable;class Compare def initialize(v); @value = v; end def || (that) if @value != 0 then self else that end end end # of class Compare Great = Compare::new(1) Equal = Compare::new(0) Less = Compare::new(-1) end # of module Comparable 意味的には、比較を真偽で表すなら、等しいかそうでないかでしょう。等しい ときに false はちょっとイヤです。 大小関係を表したいなら、現状 -1,0,1 か、または三値クラスを用意するのが スマートだと思います。今も真偽値の為に Boolean があるわけだし。 大小比較以外にも三つの値をとる演算ってありますかね? 具体的な問題は思い 出せませんが、たまに使いたくなった記憶はあるなぁ。頻出するならホントに採 用してもいいかもしれませんが。知能方面だと使いそうな気もちょっと。 ただどんな演算を定義するのかよく分からないなぁ。当然 n値クラスはいらな いの? という疑問も出てくるし(^^; ところで cascade 演算なら =>(矢印)なんてしっくりきそう。 a.to_i <=> b.to_i => a.to_i <=> b.to_s やっぱり今イチかな…(^^; > Wakou Aoyama <wakou / fsinet.or.jp> writes: > > :[a.to_i, a.to_s, a.to_f] <=> [b.to_i, b.to_s, b.to_f] > : > :これも Array の機能を利用した応用技であり、そういう応用技が必要という > :事は、元の仕様が不適切という事は明らかであると思います。 > > だから Ruby の場合はこうなんだでいいと思います. > Perl よりよっぽどわかりやすいし. 結局のところ、ぼくもこれでいいと思います。 …もう一つ美的趣味言うと a,b と to_i,s,f を分けて書きたいなぁ。 [a,b] => [:to_i, :to_s, :to_f] うーん。。。この場合のみに特化しすぎた美しさだな(^^; > で Schwartzian Transform の話に続くわけで. この前の Perl 勉強会で初めて知りましたです。 今度機会あれば使ってみようかと:-) -- だい@楓街 MAP2303 / mapletown.net 紅玉軌道異変アリ。