📌

Ruby でクラスオブジェクトを #clone, #dup するとどうなる?

に公開

それはそう、っていう内容ですが考えたことがなかったので覚書。
#clone#dup はレシーバのオブジェクトをコピーするメソッドです。
なので『違うオブジェクト』として生成されます。

obj = "homu"
obj2 = obj.clone

p obj.__id__  # => 16
p obj2.__id__ # => 24

このときにレシーバがクラスオブジェクトの場合は『名前がないクラスオブジェクト』として生成されます。

new_class = Integer.clone

# 名前がないオブジェクトとして生成される
pp new_class      # => #<Class:0x00007e19d1ca2588>
pp new_class.name # => nil

それはそう、なんですがあんまりイメージできてなかったので覚書。

GitHubで編集を提案

Discussion