# frozen_string_literal: true
это магический комментарий, впервые поддерживаемый в Ruby 2.3, который сообщает Ruby, что все строковые литералы в файле неявно заморожены, как если бы #freeze
они были вызваны для каждого из них. То есть, если строковый литерал определен в файле с этим комментарием, и вы вызываете метод для этой строки, который изменяет его, например <<
, вы получитеRuntimeError: can't modify frozen String
.
Комментарий должен быть в первой строке файла.
В Ruby 2.3 этот магический комментарий можно использовать для подготовки к фиксированным строковым литералам, которые по умолчанию используются в Ruby 3 .
В Ruby 2.3 запускается с --enable=frozen-string-literal
флагом, а в Ruby 3 строковые литералы фиксируются во всех файлах. Вы можете переопределить глобальные настройки с помощью # frozen_string_literal: false
.
Если вы хотите, чтобы строковый литерал был изменяемым независимо от глобальных или файловых настроек, вы можете поставить перед ним префиксный унарный +
оператор (будьте осторожны с приоритетом оператора) или вызвать .dup
его:
# frozen_string_literal: true
"".frozen?
=> true
(+"").frozen?
=> false
"".dup.frozen?
=> false
Вы также можете заморозить изменяемую (незамерзшую) строку с помощью одинарного кода -
.