[解決済み】Ruby: frozen_string_literal: true" というコメントは何を意味しているのでしょうか?
2022-03-27 14:27:23
質問
これは
rspec
のbinstubをプロジェクトディレクトリに置いています。
#!/usr/bin/env ruby
begin
load File.expand_path("../spring", __FILE__)
rescue LoadError
end
# frozen_string_literal: true
#
# This file was generated by Bundler.
#
# The application 'rspec' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require "pathname"
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
Pathname.new(__FILE__).realpath)
require "rubygems"
require "bundler/setup"
load Gem.bin_path("rspec-core", "rspec")
これは何を意図しているのでしょうか?
# frozen_string_literal: true
解決方法は?
# frozen_string_literal: true
は、Ruby 2.3 で初めてサポートされたマジックコメントで、ファイル内のすべての文字列リテラルを暗黙のうちに凍結することを、あたかも
#freeze
がそれぞれ呼び出されました。つまり、ある文字列リテラルがこのコメント付きのファイルで定義されており、その文字列を変更するメソッド、例えば
<<
と表示されます。
RuntimeError: can't modify frozen String
.
コメントは、ファイルの先頭行に記述する必要があります。
Ruby 2.3では、このマジックコメントを使用することができます。 Ruby 3 のデフォルトである凍結文字列リテラルに対応するために .
Ruby 2.3では
--enable=frozen-string-literal
フラグを使用します。
で、Ruby3では
文字列リテラルは、すべてのファイルで凍結されます。グローバルな設定をオーバーライドするには
# frozen_string_literal: false
.
文字列リテラルをグローバルまたはファイルごとの設定に関係なく変更可能にしたい場合、その前に単項の
+
演算子(演算子の優先順位に注意)または
.dup
を追加しました。
# frozen_string_literal: true
"".frozen?
=> true
(+"").frozen?
=> false
"".dup.frozen?
=> false
また、ミュータブルな(凍結されていない)文字列を凍結するには、単項の
-
.
関連
-
[解決済み] Rubyでリモートホストの到達可能性をpingで確認する方法
-
[解決済み] Rubyでfailキーワードは何をするのですか?
-
[解決済み] 文字列リテラルの前にある'b'文字は何を意味するのでしょうか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyで文字列を小文字・大文字に変換する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] w(array)とはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyで新しい文字列を作成せずに文字列をトリミングする標準的な方法は何ですか?
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] -bashです。/Users/myname/.bash_profile: パーミッションが拒否されました
-
[解決済み] Gemfile が見つかりません。
-
[解決済み] レイルズ・ジェネレート」を逆手に取る方法
-
[解決済み] Ruby の `print` から bash スクリプトを呼び出して echo するにはどうしたらいいですか?
-
[解決済み] OpenSSL AES-256-CBC 暗号化エラー、"間違った最終ブロック長" Ruby
-
[解決済み] 動的な定数割り当て
-
[解決済み] 構文エラー、予期しない ',', 期待する ')' 。
-
[解決済み] JanusのセットアップにVIMプラグインを追加する