馬場@大阪です
自分の練習のために、作ってみました。
あまり難しいことはわからないですが^^;

馬場幹彦

class Cat
  attr_accessor :id, :name, :age, :color
  @@ary={}
  @@ary2={}
  @@id=0
  def Cat.findall()
    @@ary
  end
  def Cat.findall2()
    @@ary2
  end
  def Cat.findById(id)
    @@ary2[id]
  end
  def Cat.fight(cat1, cat2)
    cat1.age <=> cat2.age
  end
  def initialize(name, age, color)
    @name=name
    @age=age
    @color=color
    @@ary[name]=self
    @@ary2[@@id]=self
    @id=@@id
    @@id+=1
  end
  def +(other)
    newcat=self.dup
    newcat.color=(@color+other.color)/2.0
    newcat.name=""
    newcat
  end
end

mike=Cat.new("mike", 5, 10)
tama=Cat.new("tama", 3, 71)

p mike
p Cat.findall()
p Cat.findall2()
p Cat.fight(mike, tama)
p Cat.findById(mike.id)
p child=mike+tama
p mike



> 小波です.
>
> 次のようなことを実現したいのですが,可能でしょうか?
>
> 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) という形のメソッドなら簡単なのですが...
>
>