# 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
Ви також можете заморозити змінну (незаморожену) рядок з унарною -.