ruby – “freeze_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,文件中的所有字符串文字都被隐式冻结,就好像#freeze中每一个都被调用一样。也就是说,如果在具有此注释的文件中定义了字符串文字,并且您调用该字符串修改它的方法,例如<<<您将得到RuntimeError:不能修改冻结的字符串。 注释必须位于该文件的第一行。 在Ruby 2.3中,您可以使用这个魔术注释来准备在Ruby 3中默认的冻结字符串文字。 在Ruby 2.3中使用–enable = frozen-string-literal标志运行,而在Ruby 3中,字符串文字在所有文件中被冻结。您可以使用#frozen_string_literal:false覆盖全局设置。 如果您希望字符串字面值可变,无论全局或每个文件设置如何,您可以使用一元运算符(谨慎运行优先级)或调用.dup来为其添加前缀。

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

您还可以使用一元 – 冻结可变(未冻结)字符串。

http://stackoverflow.com/questions/37799296/what-does-the-comment-frozen-string-literal-true-do

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby – “freeze_string_literal:true”的评论是什么?