From: matz@... (Yukihiro Matsumoto) Date: 2003-03-10T07:44:37+09:00 Subject: [ruby-dev:19782] Re: File.open with block calls IO#close even if it is overriden まつもと ゆきひろです In message "[ruby-dev:19780] Re: File.open with block calls IO#close even if it is overriden" on 03/03/09, "TOYOFUKU Chikanobu" writes: |> なんか苦労の割に得られるものが少ないので、あんまり採用したく | | if (FIXNUM_P(*a)) { | if (FIXNUM_P(*b) && Fixnumのcmpデフォルトのままフラグ) return *a - *b; | } | else if (TYPE(*a) == T_STRING && TYPE(*b) == T_STRING && Stringのcmpデフォルトのままフラグ) { | return rb_str_cmp(*a, *b); | } |ぐらいならどうですか。 「きりがない」の方が解決されていません。メソッドの実装で他の メソッド(で実装されている機能)を呼んでいる場所すべてにフラグ を用意して条件チェックしたり、メソッド定義のたびに再定義を チェックするのは現実的ではありません。 また、数多くのそのような場所の中で、Hashのeql?呼び出しの場所 だけ対応するというのは、FixnumやStringの<=>をグローバルに変 更する行為そのものがあまりお勧めでないと思っているので(影響 範囲が大きすぎる)、あまり気が進みません。 中田さんの案はgenericなぶんだけマシですが、それでもまだ割り に合わないような気がしてます。 それくらいならMinimalPython(pypy) のアプローチの方がまだマシ です。って、インタプリタ総とっかえになっちゃいますが。