徳冨です。
こんな感じでどうでしょう?
----
class Cat
attr_reader(:name)
SEX = ['M', 'F']
def initialize(name,age,sex)
@name = name; @age = age; @sex = sex
end
def +(other_cat)
Cat.new(@name + other_cat.name, 0, SEX[rand(2)])
end
def Cat.fight(cats) # cats は Array
winner = cats[rand(cats.size)]
return "#{winner.name} の勝ち!"
end
end
mike = Cat.new("みけ",4.5,"F")
tama = Cat.new("たま",3.8,"M")
child = mike+tama
p child
puts Cat.fight([mike, tama])
----
クラスメソッドの定義はこのあたり。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%A5%AF%A5%E9%A5%B9%A1%
BF%A5%E1%A5%BD%A5%C3%A5%C9%A4%CE%C4%EA%B5%
C1#a.a5.af.a5.e9.a5.b9.a5.e1.a5.bd.a5.c3.a5.c9.a4.ce.c4.ea.b5.c1
蛇足ではありますが…。
このケースでは + 演算子を使うより、普通に英単語の名称を付
けられた方がいいような気がします。あと、Cat.fight も違和感
が…。(^^;
それでは。
On 2005/11/03, at 1:09, Hideo Konami wrote:
> 小波です.
>
> 次のようなことを実現したいのですが,可能でしょうか?
>
> class Cat
> def initialize(name,age,sex)
> @name = name; @age = age; @sex = sex
> end
> def hoge
> end
> ...
> ...
> end
>
> mike = Cat.new("みけ",4.5,"F")
> tama = Cat.new("たま",3.8,"M")
>
> というふうにCatクラスを定義して,そのオブジェクト(イン
> スタンス)
> である mike, tama を生成したとします.
> そのあと,たとえば次のような形でこれらのオブジェクト間の演算
> を定義することはできるでしょうか.
>
> babycat = mike + tama
>
> ここで Cat クラスに属する2個のオブジェクト同士の
> + の演算は,
> mike と tama の性質から導かれるもので,たとえば上記のよ
> うに
> して両親の性質をまぜた子猫を作るものとします.
>
> また別にたとえば
>
> puts Cat.fight(mike,tama)
>
> みたいな形で,mike, tama のもつ性質を利用して勝ち負けを
> 決めて
> "みけの勝ち!" といった出力を得るようにすることはできる
> でしょうか.
>
> mike.fight(tama) という形のメソッドなら簡単なのですが...
>
---------------------------------
-- Y.TOKUTOMI
-- http://d.hatena.ne.jp/Tommy1/
-- http://tommy1969.blogspot.com/