どうもこんにちは。
今回は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."