什么评论“frozen_string_literal:true”呢?

这是我的项目目录中的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中第一次支持的魔术注释,它告诉Ruby文件中的所有string都被隐式冻结,就好像每一个都调用了#freeze一样。 也就是说,如果一个string文字在这个注释中被定义在一个文件中,并且你调用了一个修改它的string的方法,例如<< ,你将得到RuntimeError: can't modify frozen String

评论必须在文件的第一行。

在Ruby 2.3中,您可以使用这个神奇的注释来准备在Ruby 3中默认的冻结string文字。

在Ruby 2.3中运行--enable=frozen-string-literal标志,而在Ruby 3中,string文字在所有文件中都被冻结。 您可以使用# frozen_string_literal: false覆盖全局设置。

如果你希望一个string文字是可变的而不pipe全局或者每个文件的设置如何,你可以用一元+运算符(注意运算符的优先级)或者调用.dup

 # frozen_string_literal: true "".frozen? => true (+"").frozen? => false "".dup.frozen? => false 

你也可以用一元冻结一个可变的(解冻的)string。