# frozen_string_literal: trueé um comentário mágico, suportado pela primeira vez no Ruby 2.3, que informa ao Ruby que todos os literais de string no arquivo estão implicitamente congelados, como se #freezetivessem sido chamados em cada um deles. Ou seja, se um literal de string for definido em um arquivo com esse comentário, e você chamar um método nessa string que a modifique, como <<você obterá RuntimeError: can't modify frozen String.
O comentário deve estar na primeira linha do arquivo.
No Ruby 2.3, você pode usar esse comentário mágico para se preparar para literais de string congelados, sendo o padrão no Ruby 3 .
No Ruby 2.3, execute o --enable=frozen-string-literalsinalizador e , no Ruby 3, os literais de strings são congelados em todos os arquivos. Você pode substituir a configuração global por # frozen_string_literal: false.
Se você deseja que uma literal de cadeia de caracteres seja mutável, independentemente da configuração global ou por arquivo, você pode prefixá-la com o +operador unário (tomando cuidado com a precedência do operador) ou invocá .dup-la:
# frozen_string_literal: true
"".frozen?
=> true
(+"").frozen?
=> false
"".dup.frozen?
=> false
Você também pode congelar uma sequência mutável (descongelada) com unária -.