これはなに?
最近はお遊びコードじゃなくて、ちゃんとしたコードを読んで勉強しています。ももぞのです。
コードリーディングをしていて、ふとなんじゃこりゃと思ったコードのまとめです。
ただのメモ書きなので、めっちゃざっくりです。
class << self
特異クラス方式のクラスメソッド定義で使う。
一気に何個でもクラスメソッドが定義できる。
class User
class << self
def class_method1
end
def class_method2
end
end
end
self.method
1つだけクラスメソッドを定義するときに使う。
class User
def self.method
end
end
def hoge.method_name; end
特異メソッド。
hogeオブジェクトに対してのみ特定のメソッドを持たせるときに使う。
include
ざっくり表現:インスタンスメソッド読み込み
ClassにModuleを読み込み。いわゆるMix-in。
モジュールにモジュールをincludeすることもできる。
includedメソッドが中で呼ばれるらしい。
ちなみにこれだけだとクラスメソッドは別途指定しないと読み込めない。
extend
ざっくり表現:クラスメソッド読み込み
extendメソッドは、オブジェクトの特異クラスにモジュールを取り込み、モジュールのメソッドを特異メソッドとして使えるようにします。
クラスメソッドを定義するのと同じことか。
extend ActiveSupport::Concern
ナウいサービスでよく見るやつ。(いうてそんなに最近でもないか...
モジュールを読み込んだときにインスタンスメソッドもクラスメソッドも両方読み込める。
included do~end
extend ActiveSupport::Concernとセットで使われることが多い。
このブロック内にメソッドを定義しておくと、モジュールがincludeされたあとににそのメソッドが動作する。
module UserDelegatable
extend ActiveSupport::Concern
included do
def notificate
p "includeされました"
end
end
end
参考
特異クラス・特異メソッド・メソッドの種類 Ruby - Qiita
Rubyのincludeとextendについて - QA@IT
» Rails: includeされた時にクラスメソッドとインスタンスメソッドを同時に追加する頻出パターン TECHSCORE BLOG