# frozen_string_literal: true
adalah komentar ajaib, yang didukung untuk pertama kalinya di Ruby 2.3, yang memberi tahu Ruby bahwa semua string literal dalam file dibekukan secara implisit, seolah-olah #freeze
telah dipanggil untuk masing-masingnya. Yaitu, jika string literal didefinisikan dalam file dengan komentar ini, dan Anda memanggil metode pada string yang memodifikasinya, seperti <<
, Anda akan mendapatkannya RuntimeError: can't modify frozen String
.
Komentar harus berada di baris pertama file.
Di Ruby 2.3, Anda dapat menggunakan komentar ajaib ini untuk mempersiapkan literal string beku sebagai default di Ruby 3 .
Di Ruby 2.3 dijalankan dengan --enable=frozen-string-literal
bendera, dan di Ruby 3, string literal dibekukan di semua file. Anda dapat mengganti pengaturan global dengan # frozen_string_literal: false
.
Jika Anda ingin string literal dapat berubah tanpa memperhatikan pengaturan global atau per-file, Anda dapat mengawalinya dengan +
operator unary (berhati-hati dengan prioritas operator) atau memanggilnya .dup
:
# frozen_string_literal: true
"".frozen?
=> true
(+"").frozen?
=> false
"".dup.frozen?
=> false
Anda juga dapat membekukan string yang tidak dapat diubah (unfrozen) dengan unary -
.