[解決済み] なぜ ruby はメソッドのオーバーロードをサポートしないのですか?
2022-04-28 03:26:30
質問
Ruby はメソッドのオーバーロードをサポートしない代わりに、既存のメソッドを上書きします。なぜこのような設計になっているのか、説明できる人はいますか?
解決方法は?
メソッドのオーバーロードは、同じ名前で異なるシグネチャを持つ2つのメソッドを宣言することで実現できます。これらの異なるシグネチャは、以下のいずれかになります。
-
データ型が異なる引数、例.
method(int a, int b) vs method(String a, String b)
-
引数の数が可変である、例.
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つ保持する必要があります。
関連
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Rubyで「例外 => e」を救済するのはなぜ悪いスタイルなのですか?
-
[解決済み] Ruby on RailsでJSON出力を "きれい "にフォーマットする方法
-
[解決済み] イコール、エクル、==、==の違いは何ですか?
-
[解決済み] Ruby、execとsystemと%x()またはBackticksの違いについて
-
[解決済み] ルビーです。インスタンスからクラスメソッドを呼び出す
-
[解決済み】Rubyのメソッドで感嘆符が使われるのはなぜ?
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] -bashです。/Users/myname/.bash_profile: パーミッションが拒否されました
-
[解決済み] Rubyの除算はなぜ10進数ではなく整数を返すのですか?
-
[解決済み] Rubyで配列を降順にソートする方法
-
[解決済み] Ruby で Fixnum から String への暗黙の変換ができない (TypeError)
-
[解決済み] Rubyでファイルを移動するにはどうしたらいいですか?
-
[解決済み] rvmのインストールがうまくいきません。"RVMは機能ではありません"
-
[解決済み] 動的な定数割り当て
-
[解決済み] Ruby 2.0.0p0 IRB警告。"DLは非推奨です。Fiddleをお使いください。"
-
[解決済み] JanusのセットアップにVIMプラグインを追加する