【Ruby3.x】Binding::clone()メソッドの使い方
cloneメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
cloneメソッドは、Bindingオブジェクトの複製を作成するメソッドです。Bindingオブジェクトは、プログラムの特定の実行コンテキスト、すなわちその時点のローカル変数やselfの値などの情報をまとめたものです。
このcloneメソッドを呼び出すと、新しく別のBindingオブジェクトが生成されます。この新しいBindingオブジェクトは、元のオブジェクトとは異なる独立したオブジェクトですが、そのオブジェクトが参照している「実行コンテキストそのもの」は、元のBindingオブジェクトが参照しているものと全く同じです。
そのため、複製されたBindingオブジェクトを通じて実行コンテキスト内の変数の値を変更すると、元のBindingオブジェクトを通じて同じ変数を参照した場合でも、その変更が反映されます。これは、Bindingオブジェクト自体は複製されますが、そのオブジェクトが保持する実行コンテキストは元のものと共有されるという特性によるものです。
RubyのObject#cloneメソッドが持つ一般的な挙動と同様に、元のBindingオブジェクトがフリーズ状態(変更が禁止されている状態)であったり、特別なメソッド(特異メソッド)が定義されていたりする場合も、それらの状態や定義は複製されたBindingオブジェクトに引き継がれます。
構文(syntax)
1x = 10 2original_binding = binding 3cloned_binding = original_binding.clone 4puts cloned_binding.eval("x")
引数(parameters)
引数なし
引数はありません
戻り値(return)
Binding
このメソッドは、呼び出した Binding オブジェクトのディープコピー(内容を完全に複製したもの)を返します。