# 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 #freeze
tivessem 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-literal
sinalizador 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 -
.