en ja en en ja ja ja ja ja en ja en ja ja en ja en
instance method Object#initialize_copy (Ruby 2.5.0)
このメソッドは self を obj の内容で置き換えます。ただし、self のインスタンス変数や特異メソッドは変化しません。 Object#clone, Object#dupの内部で使われています。
initialize_copy は、Ruby インタプリタが知り得ない情報をコピーするために使用(定義)されます。例えば C 言語でクラスを実装する場合、情報をインスタンス変数に保持させない場合がありますが、そういった内部情報を initialize_copy でコピーするよう定義しておくことで、dup や clone を再定義する必要がなくなります。
デフォルトの Object#initialize_copy は、 freeze チェックおよび型のチェックを行い self を返すだけのメソッドです。
initialize_copy という名前のメソッドは自動的に private に設定されます。
[EXCEPTION] TypeError:
レシーバが freeze されているか、obj のクラスがレシーバのクラスと異なる場合に発生します。
[SEE_ALSO] Object#clone,Object#dup
以下に例として、dup や clone がこのメソッドをどのように利用しているかを示します。
obj.dup は、新たに生成したオブジェクトに対して initialize_copy を呼び
obj2 = obj.class.allocate obj2.initialize_copy(obj)
obj2 に対してさらに obj の汚染状態、インスタンス変数、ファイナライザをコピーすることで複製を作ります。 obj.clone は、さらに特異メソッドのコピーも行います。
obj = Object.new class   instance variables: #  # tainted?: false # singleton methods: #  check obj.dup #=> instance variables: #  # tainted?: true # singleton methods: #  check obj.clone #=> instance variables: #  # tainted?: true # singleton methods: :bar