nil.to_sのエンコード変更

2020/12/20に公開

Ruby 2.7.0でnil.to_sがfrozen stringを返すようになりました。
なのでエンコードの変更は失敗します。

irb> nil.to_s.force_encoding('utf-8')
FrozenError (can't modify frozen String: "")

encodeに変更すればいいんですが、force_encodingを使うのは文字列のコピーを避けたいからだし。。。

irb> nil.to_s.encode('utf-8')
=> ""

他の文字列の場合はasciiからutf-8に強制変更したいみたいだったので、非frozen文字列で。

irb> (+nil.to_s).force_encoding('utf-8')
=> ""

Discussion