[解決済み] ネストされたクラスとモジュールにネストされたクラスはいつ使用するのですか?
2022-02-14 16:42:09
質問内容
サブクラスやモジュールを使うタイミングはよく分かっているのですが、最近、このようにクラスがネストしているのを見かけるようになりました。
class Foo
class Bar
# do some useful things
end
end
というように、モジュールの中にネストされたクラスも同様です。
module Baz
class Quux
# more code
end
end
ドキュメントや記事がまばらなのか、私が適切な検索キーワードを探り当てられるほど教養がないのか、このトピックに関する情報があまり見つからないようです。
どなたか、なぜ、どのような場合にそのような技術が使われるのか、例や投稿へのリンクを提供していただけませんか?
解決方法は?
他のOOP言語では 内部クラス は、上位のクラスに束縛されないとインスタンス化できない。例えば、Javaでは
class Car {
class Wheel { }
}
の中のメソッドだけが
Car
クラスが作成できるのは
Wheel
s.
Rubyにはそのような動作はありません。
Rubyの場合。
class Car
class Wheel
end
end
とは異なります。
class Car
end
class Wheel
end
クラス名のみ
Wheel
vs.
Car::Wheel
. この名前の違いによって、プログラマは
Car::Wheel
クラスは、一般的な車輪とは対照的に、車の車輪だけを表現することができます。Rubyのクラス定義のネストは好みの問題ですが、2つのクラスの間の契約をより強く強制し、そうすることでクラスとその用途に関するより多くの情報を伝えるという意味で、目的を果たします。
しかし、Rubyのインタープリターにとっては、名前の違いに過ぎない。
2つ目の意見ですが、モジュールの中にネストされたクラスは、一般的にクラスの名前空間として使用されます。例えば
module ActiveRecord
class Base
end
end
とは異なります。
module ActionMailer
class Base
end
end
モジュールの中にクラスがネストされている使い方はこれだけではありませんが、一般的に最もよく使われます。
関連
-
[解決済み] Gem::Specification.reset中に未解決のスペックがある。
-
[解決済み] Capybaraを使ったドロップダウンでのオプションの選択方法
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] 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:kind_of? vs. instance_of? vs. is_a?
-
[解決済み] Rubyのメソッド'to_sym'は何をするのですか?
-
[解決済み] Ruby 'require' エラー: そのようなファイルをロードできない
-
[解決済み] Ruby プログラムに一定時間待つように指示する
-
[解決済み] Ruby - 文字列を日付に変換する
-
[解決済み] 配列をアルファベット順に並べるには?
-
[解決済み] Ruby で配列の順序を逆転させる
-
[解決済み] OpenSSL AES-256-CBC 暗号化エラー、"間違った最終ブロック長" Ruby
-
[解決済み] プロキシ(ISA-NTLM)の後ろからRuby Gemsをアップデートする方法
-
[解決済み] 変数が整数であるかどうかのチェック