🙄
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
これは知らなかった。
Discussion