Rubyでオーバーロード話続き。

by tanabe on March 15, 2006

Rubyでメソッドオーバーロードについて検索してたら、まつもとさんのこんなログを見つけた。

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1401

まず、

引数の数についてはoptional引数とrest引数で対応して
ください.

  def foo(a, b=23, *c)
  end

呼び出しは以下のようになります.

  foo()		# error!! 引数の数が足りない
  foo(1)        # a=1, b=23, c=[]
  foo(2,3)      # a=2, b=3, c=[]
  foo(2,3,4)    # a=2, b=3, c=[4]
  foo(2,3,4,5)  # a=2, b=3, c=[4,5]

そして、

メソッドの型については

  * Kernel#typeを使って分類する

      case obj.type
      when "Integer"
        ...
      when "Float"
        ...
      else
        ...
      end

  * defined?を使ってメソッドが定義されているかどうか調べる

     if defined? obj.foobar
       ...
     end

  * Object#kind_of?を使ってサブクラスかどうか調べる

     if obj.king_of? IO
       ...
     end

んー、なるほど。追記したいことがあるけど、時間がないのであとで書く!



この記事へのコメント
kind_of が、king_of になってますよー。
(って元リンクがそうなってるから、っていう話だろうけど)
Posted by takaaki024 at August 20, 2007 16:16