【Ruby3.x】UnboundMethod::clone()メソッドの使い方
cloneメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
cloneメソッドは、レシーバーであるUnboundMethodの複製を作成するメソッドです。UnboundMethodとは、特定のオブジェクトに紐付けられていないメソッド自体を表現するオブジェクトのことです。通常、クラスやモジュールに定義されたメソッドを、特定のインスタンスを介さずに参照したい場合に取得されます。このUnboundMethodオブジェクトは、後からMethod#bindメソッドを使って任意のオブジェクトにバインドすることで、そのオブジェクトのメソッドとして実行することが可能になります。
UnboundMethod#cloneメソッドは、このUnboundMethodオブジェクトのコピーを生成します。具体的には、メソッドが定義されているクラスやモジュール、そしてそのメソッド名といった、UnboundMethodオブジェクトが保持する全ての情報が複製され、新しい独立したUnboundMethodオブジェクトとして返されます。複製されたUnboundMethodオブジェクトは、元のオブジェクトと同様に、Method#bindメソッドを用いて異なるオブジェクトにバインドし、メソッドとして呼び出すことができます。これは、元のUnboundMethodオブジェクトの状態を保持しつつ、それを変更することなく別の場所で利用したい場合や、複数のコンテキストで同じメソッドを独立して扱いたい場合に有用です。このようにして作成された複製は、元のオブジェクトとは異なるインスタンスとして扱われます。
構文(syntax)
1class MyClass 2 def my_method 3 # ... 4 end 5end 6 7unbound_method_object = MyClass.instance_method(:my_method) 8cloned_unbound_method_object = unbound_method_object.clone
引数(parameters)
引数なし
引数はありません
戻り値(return)
UnboundMethod
このメソッドは、呼び出し元の UnboundMethod オブジェクトの複製を返します。複製されたオブジェクトは、元のオブジェクトと同じメソッド定義を参照しますが、独立したオブジェクトとして扱われます。