Gimiteといいます。 > なんか世間にはMultipleDispatchとかいって > 複数のオブジェクトの「組み合わせ」に対して > メソッドを呼ぶ(メッセージを送信する)ということが > できる言語もあるらしいです。 以前、RubyでMultipleDispatchもどきを無理やり実装したことがあります。 それを使うと、こんな風に書けます。 require "product" class Cat attr_accessor(:name) end #「CatとCatの組み合わせ」クラスの定義。 def_product(Cat*Cat) do #selfの代わりにlhsとrhsを使う。 def fight() printf("%s vs %s!\n", lhs.name, rhs.name) end end tama= Cat.new() tama.name= "Tama" mike= Cat.new() mike.name= "Mike" #product(tama, mike)で「tamaとmikeの組み合わせ」をあらわす。 product(tama, mike).fight() # ==> Tama vs Mike! 一応継承にも対応してるんですが、いろいろ変な制限があります。 継承が絡んだMultipleDispatchを自然な形で定義/実装するのはかなり難しそう な気がします。 > が、まあ今主流の言語にはその機能は無いようです。 というのは、その辺が理由なのかなぁ、と思ってます。 一応product.rbのソースを置いておきます。 http://gimite.ddo.jp/gimite/rubymess/product.rb -- Gimite 市川 <gimite / gimite.ddo.jp>