🙄

Ruby で文字列リテラルを直接 freeze すると同じオブジェクトid が返ってくる

に公開

知らなかったので覚書的なやつなんですが、次のように文字列リテラルに対して直接 freeze した場合には同じオブジェクトid のオブジェクトが返ってきます。

# 以下はすべて同じオブジェクトid になる
pp "hoge".freeze.__id__   # => 60
pp "hoge".freeze.__id__   # => 60
pp "hoge".freeze.__id__   # => 60

ただし、一度変数に代入した後に freeze するとその限りではなくなります。

pp "hoge".freeze.__id__   # => 60

# これは違うオブジェクトid になる
a = "hoge"
pp a.freeze.__id__   # => 80

これは知らなかった。

GitHubで編集を提案

Discussion