🕌
Ruby の frozen_string_literal と文字列の式展開の話
Ruby では # frozen_string_literal: true
マジックコメントを使うことで文字列リテラルをデフォルトで frozen
にすることができます。
# frozen_string_literal: true
p "hoge".frozen?
# => true
また、このときに複数個、同じ文字列リテラルがある場合はすべて共通のオブジェクトid としてデータが割り当てられます。
# frozen_string_literal: true
p "hoge".__id__ # => 60
p "hoge".__id__ # => 60
p "hoge".__id__ # => 60
p "hoge".__id__ # => 60
式展開を使用している場合
# frozen_string_literal: true
をしている場合でも式展開を行っている場合は frozen
されないので注意する必要があります。
# frozen_string_literal: true
# これは frozen ではない
pp "hoge#{42}".frozen?
# => false
Discussion