【Ruby3.x】UnboundMethod::dup()メソッドの使い方
dupメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
dupメソッドは、UnboundMethodオブジェクトの複製を作成するメソッドです。UnboundMethodとは、まだ特定のレシーバ(オブジェクト)に紐付いていない、メソッドの定義そのものを表すオブジェクトです。例えば、Stringクラスが持つlengthメソッドの定義そのものを指し、特定の文字列インスタンス(例: "hello")に適用されていない状態のメソッドを表現します。
このdupメソッドを呼び出すと、元のUnboundMethodオブジェクトとまったく同じメソッドの定義内容を持つ、新しいUnboundMethodオブジェクトが生成されます。生成された新しいUnboundMethodオブジェクトは、元のオブジェクトとは異なるメモリアドレス(object_id)を持つ、独立したインスタンスとして扱われます。しかし、これらが表しているメソッドの定義自体は完全に同一であるため、等価性を示す==演算子やeql?メソッドで比較するとtrueを返します。
この機能は、UnboundMethodオブジェクトを複数のデータ構造に格納する際や、元のUnboundMethodオブジェクトに影響を与えることなく、その複製に対して何らかの参照操作を行いたい場合に利用できます。ただし、UnboundMethodオブジェクト自体は、一度生成されるとその内容が変更されることがない不変(immutable)な性質を持つため、dupメソッドの利用は特定の高度なケースに限られることがあります。
構文(syntax)
1unbound_method_object.dup
引数(parameters)
引数なし
引数はありません
戻り値(return)
UnboundMethod
dup メソッドは、呼び出した UnboundMethod オブジェクトの複製を返します。これは、元の UnboundMethod オブジェクトとは独立した新しい UnboundMethod オブジェクトです。