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>