[#41455] オブジェクト同士の演算などを実装するには? — Hideo Konami <konami@...>

小波です.

24 messages 2005/11/02
[#41457] Re: オブジェクト同士の演算などを実装するには? — rubikitch <rubikitch@...> 2005/11/02

From: Hideo Konami <konami@kyoto-wu.ac.jp>

[#41459] Re: オブジェクト同士の演算などを実装するには? — Hideo Konami <konami@...> 2005/11/03

小波です.

[#41461] Re: オブジェクト同士の演算などを実装するには? — IWAOKA Masahiro <iwaoka@...> 2005/11/03

いわおかです。

[#41489] Matrixの継承について — argento@...

はじめまして。吉田と申します。

25 messages 2005/11/06
[#41495] Re: Matrixの継承について — Yukihiro Matsumoto <matz@...> 2005/11/06

まつもと ゆきひろです

[#41497] Re: Matrixの継承について — "T.Y" <argento@...> 2005/11/07

るびきち様、まつもと様

[#41499] Re: Matrixの継承について — keiju@... (石塚圭樹) 2005/11/07

けいじゅ@いしつかです.

[#41529] Re: Matrix の継承について — Shin-ichiro HARA <sinara@...> 2005/11/12

原です。

[#41535] Re: Matrix の継承について — keiju@... (石塚圭樹) 2005/11/14

けいじゅ@いしつかです.

[#41536] Re: Matrix の継承について — Yukihiro Matsumoto <matz@...> 2005/11/14

まつもと ゆきひろです

[#41537] Re: Matrix の継承について — keiju@... (石塚圭樹) 2005/11/14

けいじゅ@いしつかです.

[#41538] Re: Matrix の継承について — Yukihiro Matsumoto <matz@...> 2005/11/14

まつもと ゆきひろです

[#41503] 数を減らしてくループ — Takeshi Horinouchi <horinout@...>

堀之内と申します。

13 messages 2005/11/08

[#41602] エクセルファイルを読み込む際の問題(質問) — "Hisashi Yahata" <yahatah@...>

質問で恐縮ですが、ご教示ください。

14 messages 2005/11/28

[#41624] MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

26 messages 2005/11/30
[#41625] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/01

永井@知能.九工大です.

[#41627] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/01

天野竜太郎と申します。

[#41636] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/02

永井@知能.九工大です.

[#41637] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/02

8.4.10のtcl.hやtk.hは、

[#41644] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/03

永井@知能.九工大です.

[#41646] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/03

> Tcl/TkAqua もこの Macintosh のルールに従うのであれば

[#41647] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/03

永井@知能.九工大です.

[#41649] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/03

永井@知能.九工大です.

[#41650] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/04

天野です。

[#41651] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/04

永井@知能.九工大です.

[#41653] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/04

[#41658] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/04

永井@知能.九工大です.

[#41663] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/04

完全に私の勘違いです。

[#41664] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/05

永井@知能.九工大です.

[#41665] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/05

ruby-list:41651の

[ruby-list:41457] Re: オブジェクト同士の演算などを実装するには?

From: rubikitch <rubikitch@...>
Date: 2005-11-02 16:43:32 UTC
List: ruby-list #41457
From: Hideo Konami <konami@kyoto-wu.ac.jp>
Subject: [ruby-list:41455] オブジェクト同士の演算などを実装するには?
Date: Thu, 3 Nov 2005 01:09:34 +0900

るびきちです。

> mike = Cat.new("みけ",4.5,"F")
> tama = Cat.new("たま",3.8,"M")
> 
> babycat = mike + tama

class Cat
  def +(other)
    # 子作り
  end
end

こういう感じで定義できないことはないです。
しかし、この場合に「+」という演算子メソッドを使うのはどうかと思います。
あとでコードを読んだとき猫と猫を「足す」という行為が、直感的にわかりません。
猫に代数的構造があるとは考えないでしょう。

普通に
babycat = mike.make_baby(tama)
だといけないですか?

> puts Cat.fight(mike,tama)
> 
> みたいな形で,mike, tama のもつ性質を利用して勝ち負けを決めて
> "みけの勝ち!" といった出力を得るようにすることはできる
> でしょうか.
> 
> mike.fight(tama) という形のメソッドなら簡単なのですが...

具体的なテストケースがないのでどういうのがお望みかわかりませんが、
こんな感じでしょうか?

勝手に攻撃力をセットして高い方を勝ちとしています。
引き分けの判定はなしです。(手抜き)
また、型チェックもしていません。

class Cat
  def initialize(name,age,sex)
      @name = name; @age = age; @sex = sex
  end

  attr_reader :name, :age, :sex
  attr_accessor :strength

  def hoge
  end

  def self.fight(a, b)
    a.fight b
  end

  def fight(other)
    winner = if self.strength > other.strength
               self
             else
               other
             end
    "#{winner.name}の勝ち!"
  end

end

mike = Cat.new("みけ",4.5,"F")
tama = Cat.new("たま",3.8,"M")

mike.strength = 100
tama.strength = 90

puts Cat.fight(mike,tama)
puts mike.fight(tama)


--
また、コンストラクタはHash引数による疑似キーワード引数の方がいいかもしれません。
{}は省略できて、見易いです。
mike = Cat.new(:name=>"みけ", :age=>4.5, :sex=>"F")

後で体重などが必要になったときにもすぐ対応できます。
mike = Cat.new(:name=>"みけ", :age=>4.5, :sex=>"F", :weight=>3.5)

class Cat
  def initialize(x)
    @name = x[:name]; @age = x[:age]; @sex = x[:sex]
  end
end



るびきち☆
http://www.rubyist.net/~rubikitch/

In This Thread