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