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系の記事などを書き連ねています

Rails6で追加 レコードを一括登録できるinsert_allについて

  insert_allの概要 rails6で追加された。複数レコードを一括登録できる。 insert_allドキュメント insert_allの使い方 形としてはこんな感じ。 モデル.insert_all([{カラム: value...},{カラム: value...}......

QooQ