0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

クラスメソッドの定義方法いろいろ

0
Posted at

class << Hoge の意味があんまり分かっていなかったのでメモ

先にまとめ

  • クラスメソッドとは、 そのクラスへの特異メソッドの定義
  • 特異メソッドは、それぞれのオブジェクトがもつ、特異クラス に定義されている
  • 以下のようにするとその中はは特異クラスのスコープになる
.ruby
class << Hoge
  # Hoge の特異クラスのスコープ
  def fuga # Hogeに特異メソッド `fuga` を追加
  end
end

クラスに特異メソッドを追加する(その1

.ruby
class Hoge
end

def Hoge.fuga
  'fuga'
end

Hoge.fuga #=> "fuga"

クラスに特異メソッドを追加する(その2

class定義の中でも、得意メソッドを追加できる

.ruby
class Hoge
  def self.fuga
    'fuga'
  end
end

Hoge.fuga #=> "fuga"

extend を使う

extendモジュールのインスタンスメソッドを、対象の特異メソッドとして追加
なので、classの特異メソッドとして追加すれば、クラスメソッドになる

.ruby
module Fuga
  def fuga
    'fuga'
  end
end

class Hoge
  extend Fuga
end

Hoge.fuga #=> "fuga"

特異クラスに直接入れる

.ruby
class Hoge
end

class << Hoge # Hoge特異クラスへの定義 
  def fuga
    'fuga'
  end
end

Hoge.fuga #=> "fuga"

特異クラスって何?

全てのオブジェクトは自分専用のclassを内部的に持っており、それを特異クラスと呼ぶ

  • オブジェクトに特異メソッドを追加する場合、そのオブジェクトの特異クラスにメソッドが追加されている
  • 特異クラスには、 singleton_class でアクセスできる

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?