3
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?

【Ruby】singleton_classについて

Last updated at Posted at 2024-11-05

どうもこんにちは。

今回はsingleton_classについて勉強したので備忘録としてまとめます。

singleton_class(シングルトンクラス/特異クラス)とは

singleton_class(シングルトンクラス) は、Rubyにおける特別なクラスで、特定のオブジェクトに固有のメソッドや変数を定義するために使用されます。

Rubyでは、すべてのオブジェクトが自身のシングルトンクラスを持っており、このクラスを通じてオブジェクトに一時的または特定の機能を追加できます。

singleton_classの基本的な使い方

singleton_classは、オブジェクトのシングルトンクラスを取得するためのメソッドです。このクラスを操作することで、特定のオブジェクトに対するシングルトンメソッドやシングルトン変数を定義できます。

object.singleton_class
  • object: シングルトンクラスを取得したいオブジェクト
サンプルコード
obj = Object.new

# シングルトンクラスを取得
singleton = obj.singleton_class

# シングルトンクラスにメソッドを定義
singleton.define_method(:greet) do
  "Hello from singleton class!"
end

# メソッドの呼び出し
puts obj.greet  # => "Hello from singleton class!"

シングルトンクラスを使用してメソッドを定義する方法

singleton_classを使用する方法

obj = Object.new

obj.singleton_class.define_method(:greet) do
  "Hello from singleton_class!"
end

puts obj.greet  # => "Hello from singleton_class!"

defキーワードを使用する方法

obj = Object.new

def obj.greet
  "Hello from singleton method!"
end

puts obj.greet  # => "Hello from singleton method!"

define_singleton_methodを使用する方法

obj = Object.new

obj.define_singleton_method(:greet) do
  "Hello from define_singleton_method!"
end

puts obj.greet  # => "Hello from define_singleton_method!"

クラスメソッドを定義する方法

selfを使用する方法

class MyClass
  def self.class_method
    "This is a class method."
  end
end

puts MyClass.class_method  # => "This is a class method."

singleton_classを使う方法

class MyClass
  singleton_class.define_method(:another_class_method) do
    "Another class method defined via singleton_class."
  end
end

puts MyClass.another_class_method  # => "Another class method defined via singleton_class."

class << selfを用いてシングルトンクラスをオープンする方法

class MyClass
  class << self
    def class_method
      "This is a class method."
    end
  end
end

puts MyClass.class_method  # => "This is a class method."
3
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
3
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?