Ruby 特異クラス,特異メソッドについて

2021年5月10日月曜日

Ruby

t f B! P L

特異クラス概要

インスタンスに適用される特別なクラス。シングルトンクラスともいう。
インタプリタ内部だけで使用するクラスでユーザ側には意識させたくないクラス

特異クラス定義

class << で特定オブジェクトの特異クラスを定義できる。クラスメソッド定義で使うやつ。

class << オブジェクト名(クラス名とかインスタンス名とか)
end

特異クラス参照

selfを使う

class C
end

c = C.new

singleton_class = class << c
  self
end

singleton_class
=> #<Class:#<C:0x00007fd30219e998>>

singleton_class

class C
end

c = C.new
c.singleton_class
=> #<Class:#<C:0x00007fd30219e998>>

特異メソッド概要

特定のインスタンスに定義できるメソッド。

特異メソッド定義

インスタンス名.メソッド名

class C
end

c = C.new

def c.c_method
  p 'cの特異メソッドだよ'
end
c.c_method
=> "cの特異メソッドだよ"

class << オブジェクト名 内で定義

class C
end

c = C.new

class << c
  def c_method
    p 'cの特異メソッドだよ'
  end
end
c.c_method
=> "cの特異メソッドだよ"

class << オブジェクト名 内でinclude

module M
  def m_method
    p 'Mのメソッドだよ'
  end
end

class C
end

c = C.new

class << c
  include M
end
c.m_method
=> "Mのメソッドだよ"

extend

module M
  def m_method
    p 'Mのメソッドだよ'
  end
end

class C
end

c = C.new
c.extend(M)

c.m_method
=> "Mのメソッドだよ"

instance_eval

class C
end

c = C.new

c.instance_eval do
  def c_method
    p "cの特異メソッドだよ"
  end
end
c.c_method
=> "cの特異メソッドだよ"

自己紹介

Webエンジニアをやっています。日々思ったことや、読書レビュー、IT系の記事などを書き連ねています

広告

[書籍] 世界一楽しい決算書の読み方感想まとめ

  こういう人におすすめ 決算書を読もうとして挫折した人 企業分析したい投資家 会社で経営企画担当、管理職などのポジションの人 概要 著者はTwitterで会計クイズを行なっている 「大手町のランダムウォーカー」さん 。 「日本人全員が財務諸表を読める世界を創る」 を合言葉にして...

QooQ