1. ホーム
  2. ruby

[解決済み] なぜ ruby はメソッドのオーバーロードをサポートしないのですか?

2022-04-28 03:26:30

質問

Ruby はメソッドのオーバーロードをサポートしない代わりに、既存のメソッドを上書きします。なぜこのような設計になっているのか、説明できる人はいますか?

解決方法は?

メソッドのオーバーロードは、同じ名前で異なるシグネチャを持つ2つのメソッドを宣言することで実現できます。これらの異なるシグネチャは、以下のいずれかになります。

  1. データ型が異なる引数、例. method(int a, int b) vs method(String a, String b)
  2. 引数の数が可変である、例. method(a) vs method(a, b)

Rubyにはデータ型の宣言がないため、最初の方法ではメソッドのオーバーロードを実現することができません( 動的型付け言語 ). ですから、上記のメソッドを定義する唯一の方法は def(a,b)

2番目のオプションでは、メソッドのオーバーロードを実現できるように見えるかもしれませんが、そうではありません。例えば、引数の数が異なる2つのメソッドがあるとします。

def method(a); end;
def method(a, b = true); end; # second argument has a default value

method(10)
# Now the method call can match the first one as well as the second one, 
# so here is the problem.

そのため、rubyはメソッドルックアップチェーンに一意な名前を持つメソッドを1つ保持する必要があります。