原です。 >小波です. >レフェリーや神様の立場に立ってオブジ >ェクトを眺めることも必要なことではないでしょうか. > >もっともその立場からしても >Cat.fight(mike,tama) >とかいうふうにクラス名が頭にくるのは,たしかにへんですね.どういう >記述が自然なのでしょうか.単に >fight(mike,tama,nyan,nyaa) >で,結局クラスの外で戦わせればいいということになるのかな.ううむ. >class メソッドを利用して属しているクラスを調べてから,戦い方の流 >儀を使い分けさせるというのが,オブジェクトの神様の思し召しなので >しょうか. この問題は私も悩みました(んでいます)。 ある数のクラスNumのインスタンスa、bがあって、aとbの何か、 例えば最大公約数を a.gcd(b) などと書くことはよくあって、ここまではいいのだけど、 a, b, cの3つのgcdも考えられるから a.gcd(b, c) と書く仕様にすると、どうも対称性が悪くて気持ち悪くなります。 特に nums = [a, b, c, ...]なんかに対しては nums[0].gcd(*nums[1..-1]) と書くことになるので、あまりに不細工でイヤになります。 で、しょうがないから Num.gcd(a, b, c) とNumにメソッドを用意することになる。でも、こうするとa, b, cがNum のインスタンスという情報をうまく利用してないような気がするんです。 まあ、しかたないんでしょうね。