まつもと ゆきひろです.
In message "[ruby-list:1394] 同じメソッドで、引数が違うやつ"
on 96/12/19, (Dezawa Shin-ichiro) <dezawa / miya.fujifilm.co.jp> writes:
|
|出沢です
|同じ名前のメソッドだけど、色々な引数の型や数が
|異なるのを作れるんでしょうか?
メソッドオーバーロードですね.rubyではできません.
# 前に設計してた言語ではできるようになるはずだったんだけどな.
rubyでは変数に型がないため,オーバーロードはコンパイル時に解
消できません.よって,実行時にいちいちチェックしないと実現で
きないので,言語を簡単にするため,オーバーロードは採用しませ
んでした.引数の数については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
少々面倒ですけど,これらを組み合わせて対応してください
まつもと ゆきひろ /:|)