[解決済み] Ruby で initialize コンストラクタをオーバーロードする方法はありますか?
2023-05-31 08:24:39
質問
Javaでは、コンストラクタをオーバーロードすることができます。
public Person(String name) {
this.name = name;
}
public Person(String firstName, String lastName) {
this(firstName + " " + lastName);
}
Rubyでこれと同じ結果、つまり異なる引数を取る2つのコンストラクタを実現する方法はありますか?
どのように解決するのですか?
答えは「はい」と「いいえ」の両方です。
などのさまざまなメカニズムを使用して、他の言語と同じ結果を得ることができます。
- 引数のデフォルト値
- 変数引数リスト (スプラット演算子)
- 引数をハッシュで定義する
実際の言語の構文では、引数が異なる場合でも、メソッドを2回定義することはできません。
上記の3つのオプションを考慮すると、これらはあなたの例で次のように実装することができます。
# As written by @Justice
class Person
def initialize(name, lastName = nil)
name = name + " " + lastName unless lastName.nil?
@name = name
end
end
class Person
def initialize(args)
name = args["name"]
name = name + " " + args["lastName"] unless args["lastName"].nil?
@name = name
end
end
class Person
def initialize(*args)
#Process args (An array)
end
end
Rubyのコード、特にRailsのコードでは、2番目のメカニズムによく遭遇します。これは両方の長所を備えており、きれいなコードを生成するための構文上の工夫が可能で、特に渡されたハッシュを中括弧で囲む必要がないためです。
これは wikibooksリンク は、さらにいくつかの読み物を提供しています。
関連
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rubyに「do ... while」ループはあるのか?
-
[解決済み】Rubyでバイナリファイルを文字列として読み込む
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
-
[解決済み] Ruby send と __send__ の比較
-
[解決済み] 2つの配列を同時に反復処理するためのRubyの方法とは?
-
[解決済み] Rubyのmap(&:method)構文に引数を与えることは可能か?
-
[解決済み] Rubyオプションのパラメータ
-
[解決済み] Rubyでjavaのインターフェースに相当するものは何ですか?
-
[解決済み] Capybaraで要素の正確なテキストをマッチングして要素を見つける方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ...』の違い (ダブルドット) と '...' の違い?(トリプルドット)の違いについて教えてください。
-
[解決済み] Gemfileでrubygemを指定するときの~>と>=の違いは何ですか?
-
[解決済み] Ubuntu 14.04にRuby 2.1.4をインストールする方法
-
[解決済み] Ruby文字列のgsubメソッドとsubメソッドの違いについて
-
[解決済み] Rubyのプライベートモジュールメソッド
-
[解決済み] Ruby: 文字列の最初の文字を取得する方法
-
[解決済み] Ruby: selfを拡張する
-
[解決済み] Ruby初心者が注意すべきRuby Gotchasとは?[クローズド]
-
[解決済み] WindowsへのRubyGemsのインストール
-
[解決済み] キュウリのステップを再利用