[解決済み】Rubyのincludeとextendの違いって何?
2022-03-24 10:18:03
質問
Rubyのメタプログラミングについて頭を抱えているところです。mixin/moduleはいつも私を混乱させます。
- インクルード として指定されたモジュールのメソッドを混在させます。 インスタンスメソッド ターゲットクラスで
- 拡張 として指定されたモジュールのメソッドを混在させます。 クラスメソッド ターゲットクラスで
では、大きな違いはこれだけなのか、それとももっと大きなドラゴンが潜んでいるのか? 例
module ReusableModule
def module_method
puts "Module Method: Hi there!"
end
end
class ClassThatIncludes
include ReusableModule
end
class ClassThatExtends
extend ReusableModule
end
puts "Include"
ClassThatIncludes.new.module_method # "Module Method: Hi there!"
puts "Extend"
ClassThatExtends.module_method # "Module Method: Hi there!"
解決方法は?
おっしゃるとおりです。しかし、それだけではありません。
もし、クラス
Klazz
とモジュール
Mod
を含む。
Mod
で
Klazz
のインスタンスを生成します。
Klazz
にアクセスすることができます。
Mod
のメソッドを使用します。あるいは
Klazz
で
Mod
を与える。
クラス
Klazz
にアクセスする。
Mod
のメソッドを使用します。しかし、任意のオブジェクトを
o.extend Mod
. この場合、個々のオブジェクトは
Mod
と同じクラスを持つ他のすべてのオブジェクトが同じメソッドを持つにもかかわらず
o
はしない。
関連
-
[解決済み] Ruby で PDF 文書を解析する
-
[解決済み] Objective-Cの#importと#includeの違いは何ですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] require, include, require_once, include_onceの違い?
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] PythonモジュールとPythonパッケージの違いは何ですか?
-
[解決済み] Rubyのincludeとrequireの違いは何ですか?
-
[解決済み] クラスとモジュールの違い
-
[解決済み】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のローカル変数が未定義である
-
[解決済み] -bashです。/Users/myname/.bash_profile: パーミッションが拒否されました
-
[解決済み] Ruby on railsで改行せずにコンソールに "puts "を使用するにはどうすればよいですか?
-
[解決済み] rubyでディレクトリからすべてのファイルを要求する最良の方法?
-
[解決済み] Rubyで中央値を計算する
-
[解決済み] Ruby: 文字列をブーリアンに変換する方法
-
[解決済み] Rubyでファイルを移動するにはどうしたらいいですか?
-
[解決済み] rvmのインストールがうまくいきません。"RVMは機能ではありません"
-
[解決済み] OpenSSL AES-256-CBC 暗号化エラー、"間違った最終ブロック長" Ruby
-
[解決済み] Rubyのincludeとrequireの違いは何ですか?