[Bug #20966] 単行演算子を利用した時に意図しない警告が出てくるバグ報告

に公開

[Bug #20966] Unary plus String warns about freezing

  • 次のように + の単行演算子を使った時に Ruby 3.4 で警告が出るようになるというバグ報告
# warning: literal string will be frozen in the future (run with --debug-frozen-string-literal for more information)
+"\x1f\x8b".force_encoding("BINARY")
  • 文字列リテラルを破壊的に変更することで警告が出ている感じですね
  • これなんですが + 単行演算子ではなくて #force_encoding で警告が出ている形になっています
  • + 演算子よりもメソッド呼び出しのほうが優先順位が高いので上記のコードは以下と同等になります
+("\x1f\x8b".force_encoding("BINARY"))
  • 逆に + 単行演算子を先に評価するようにすると警告はでなくなりますね
# no warning
(+"\x1f\x8b").force_encoding("BINARY")
  • 単行演算子の優先順位難しい問題ですねえ
GitHubで編集を提案

Discussion