🕌

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
GitHubで編集を提案

Discussion