Rubyオブジェクト指向プログラミングにおけるクラスメソッドとクラスエクステンション
2022-01-04 16:09:51
クラスメソッド
クラスメソッドは、基本的にクラスのシングルピース・クラスに住むシングルピース・メソッドです。そのために定義された3つのメソッド、すなわち:
# method one
def MyClass.a_class_method; end
# Method 2
class MyClass
def self.other_class_method; end
end
# Method 3*
class MyClass
class << self
def yet_another_class_method; end
end
end
このうち3つ目は、クラスメソッドの本質を語っているので、特に覚えておいてください
クラスの拡張機能
クラスエクステンションは、クラスのシングルトン・クラスにモジュールを追加して、クラスメソッドを定義します。
module MyModule
def my_method; 'hello'; end
end
class MyClass
class < self
include MyModule
end
end
MyClass.my_method
上記のコードは、MyClass クラスのシングルトン クラスに MyModule モジュールを導入することで、具象クラス拡張がどのように実装されるかを示しています。なぜなら my_method メソッドは MyClass のシングルトン クラスのインスタンスメソッドであり、そのような my_method メソッドは MyClass のクラスメソッドでもあるのだからです。
オブジェクトの拡張機能
クラスメソッドは単一ピースメソッドの特殊なケースなので、クラス拡張の技術を任意のオブジェクトに適用することができ、これをオブジェクト拡張と呼びます
# Method 1: Open a single class to extend
module MyModule
def my_method; 'hello'; end
end
obj = Object.new
class << obj
include MyModule
end
obj.my_method # => "hello"
obj.singleton_methods # => [:my_method]
# Method 2: Object#extend method
module MyModule
def my_method; 'hello'; end
end
obj = Object.new
# Object extensions
obj.extend MyModule
obj.my_method # => "hello"
# class extension
class MyClass
extend MyModule
end
MyClass.my_method # => "hello"
Object#extend は、受信者のシングルトン・クラスにモジュールをインクルードするための高速なキー・ウェイです。
関連
-
ruby on railsのモデルアソシエーションについて解説
-
Rubyの二分探索(dichotomous search)アルゴリズムの簡単な例
-
bundlerを使ったRuby環境のインストールと複数バージョンのgemの管理
-
Ruby on Railsフレームワークの設計構造をMVCマインドで理解する
-
RubyのProcクラスとProc.newメソッドの使用法
-
Rubyのgemパッケージマネージャの使い方とbundlerによる複数バージョンのgemの管理
-
RubyのXMLデータパースライブラリ「Nokogiri」の高度な使い方
-
RubyプログラムにおけるXMLファイルの作成と解析のための方法
-
Ruby on Railsのメーラーの使い方を説明します。
-
ブログのスパムメッセージを簡単にブロックする方法
最新
-
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 実装 サイバーパンク風ボタン