# frozen_string_literal: true
ist 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 #freeze
sie 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-literal
Flag 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 -
.