freezeされた文字列リテラルのはなし。

# frozen_string_literal: true

''.tap do |s|
  s << 'a' if a
  s << 'b' if b
  s << 'c' if c
end

みたいなことをして

can't modify frozen String: ""

って怒られて

(+'').tap do |s|

で逃げようとしたんですが、複製されるようなので

String.new.tap do |s|

の方がいいだろってことになった。こういう細かいことにつまずいているから時間が溶ける。

String#+@ (Ruby 3.3 リファレンスマニュアル)

self が freeze されている文字列の場合、元の文字列の複製を返します。 freeze されていない場合は self を返します。

タイトルとURLをコピーしました