From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2001-07-23T23:07:33+09:00 Subject: [ruby-list:30711] to_int in mathn [Re: overwride method ] けいじゅ@日本ラショナルソフトウェアです. devに引っ越します. In [ruby-list :30698 ] the message: "[ruby-list:30698] Re: overwride method ", on Jul/23 17:37(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|>Rationalが「適切な」to_intを定義してれば避けられた問題かも。 >|ですが, こうするのが良いんでしょうか? > >それはRational設計者の思想の現れる場なので私の口出しするべき >点ではありません。 そういわず相談にのってくださいな. >integerが要求されるところではintegerとして >振る舞いたいと思うならto_intを提供し、そうでないならしない、 >というだけのことですね。いずれにしてもRationalがどうあるべき >かに関る重大な点だと思います。 正確には, mathn利用時におけるRationalの振る舞いですね. include "rational"だけの時は, Rational#to_intがあるのはおかしいと思うん ですね. この場合, Rationalは明示的な生成しかありませんので. include "mathn" のときは, 暗黙の生成と言うか 1/2 => Rational(1,2)となり ますので, この時問題になるんですよね... >ただ、mathnをrequireしちゃうと 1/2 がrationalになってしまう >ので、to_intを提供してないとあまりにも互換性がないだろうって >気はしますね。ま、それでなくてもグローバルに状態を変えちゃう >mathnやjcodeは恐くて使えないって話はありますが。 うーん. グローバルにしか変えられないですからね... こんな案はどうでしょう? mathnを使っている側はその挙動を知っているのでこのまま. つまり Rational#to_intなどは定義しない. それだと困るのは, インクルードしたライ ブラリなどを呼び出すときなので: Mathn::behavior(Mathn::RubyStandard) do ... end の内側では, Rational#to_intを定義し、さらにInteger#/をデフォルトの動作に 戻す. あと, Mathn::set_behavior で標準の振る舞いの設定ができる. __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju@rational.com <<---