# frozen_string_literal: trueist ein magischer Kommentar, der zum ersten Mal in Ruby 2.3 unterstützt wird und Ruby mitteilt, dass alle String-Literale in der Datei implizit eingefroren sind, als ob #freezesie für jeden von ihnen aufgerufen worden wären . Das heißt, wenn ein String - Literal in einer Datei mit diesem Kommentar definiert ist, und Sie rufen eine Methode auf diesem String, ändert es, wie <<, die Sie erhalten RuntimeError: can't modify frozen String.
Der Kommentar muss in der ersten Zeile der Datei stehen.
In Ruby 2.3 können Sie diesen magischen Kommentar verwenden , um sich darauf vorzubereiten, dass eingefrorene Zeichenfolgenliterale in Ruby 3 die Standardeinstellung sind .
In Ruby 2.3, das mit dem --enable=frozen-string-literalFlag ausgeführt wird, und in Ruby 3 werden Zeichenfolgenliterale in allen Dateien eingefroren. Sie können die globale Einstellung mit überschreiben # frozen_string_literal: false.
Wenn Sie möchten, dass ein Zeichenfolgenliteral unabhängig von der globalen Einstellung oder der Einstellung pro Datei veränderbar ist, können Sie ihm den unären +Operator voranstellen (wobei Sie auf die Priorität des Operators achten) oder ihn aufrufen .dup:
# frozen_string_literal: true
"".frozen?
=> true
(+"").frozen?
=> false
"".dup.frozen?
=> false
Sie können auch eine veränderbare (nicht gefrorene) Zeichenfolge mit unary einfrieren -.