# frozen_string_literal: true
es un comentario mágico, admitido por primera vez en Ruby 2.3, que le dice a Ruby que todos los literales de cadena en el archivo están implícitamente congelados, como si se #freeze
hubiera llamado a cada uno de ellos. Es decir, si un literal de cadena se define en un archivo con este comentario, y llama a un método en esa cadena que lo modifica, como <<
, obtendrá RuntimeError: can't modify frozen String
.
El comentario debe estar en la primera línea del archivo.
En Ruby 2.3, puede usar este comentario mágico para prepararse para los literales de cadena congelados que son los predeterminados en Ruby 3 .
En Ruby 2.3 se ejecuta con la --enable=frozen-string-literal
bandera, y en Ruby 3, los literales de cadena se congelan en todos los archivos. Puede anular la configuración global con # frozen_string_literal: false
.
Si desea que un literal de cadena sea mutable independientemente de la configuración global o por archivo, puede prefijarlo con el +
operador unario (teniendo cuidado con la precedencia del operador) o invocarlo .dup
:
# frozen_string_literal: true
"".frozen?
=> true
(+"").frozen?
=> false
"".dup.frozen?
=> false
También puede congelar una cadena mutable (sin congelar) con unario -
.