Que fait le commentaire «frozen_ssortingng_literal: true»?

Ceci est le rspec rspec dans le répertoire de mon projet.

 #!/usr/bin/env ruby begin load File.expand_path("../spring", __FILE__) rescue LoadError end # frozen_ssortingng_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") 

Qu’est-ce que cela est censé faire?

 # frozen_ssortingng_literal: true 

# frozen_ssortingng_literal: true est un commentaire magique, supporté pour la première fois dans Ruby 2.3, qui indique à Ruby que tous les littéraux de chaîne du fichier sont implicitement gelés, comme si #freeze avait été appelé sur chacun d’eux. Autrement dit, si un littéral de chaîne est défini dans un fichier avec ce commentaire et que vous appelez une méthode sur cette chaîne qui la modifie, telle que << , vous obtiendrez RuntimeError: can't modify frozen Ssortingng .

Le commentaire doit figurer sur la première ligne du fichier.

Dans Ruby 2.3, vous pouvez utiliser ce commentaire magique pour préparer les littéraux de chaîne figés par défaut dans Ruby 3.

Dans Ruby 2.3, exécutez avec l'indicateur --enable=frozen-ssortingng-literal et dans Ruby 3, les littéraux de chaîne sont gelés dans tous les fichiers. Vous pouvez remplacer le paramètre global par # frozen_ssortingng_literal: false .

Si vous voulez qu'un littéral de chaîne soit mutable indépendamment du paramètre global ou par paramètre de fichier, vous pouvez le préfixer avec l'opérateur unary + (en faisant attention à la priorité de l'opérateur) ou l'appeler dessus:

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

Vous pouvez également geler une chaîne mutable (non gelée) avec unary - .

Dans Ruby 3.0. Matz (créateur de Ruby) a décidé de rendre tous les littéraux Ssortingng bloqués par défaut.

Vous pouvez utiliser dans Ruby 2.x. Ajoutez simplement ce commentaire dans la première ligne de vos fichiers.

 # frozen_ssortingng_literal: true 

Le commentaire ci-dessus en haut d’un fichier modifie la sémantique des littéraux de chaîne statiques dans le fichier. Les littéraux de chaîne statiques seront gelés et retourneront toujours le même object. (La sémantique des littéraux de chaîne dynamics n’est pas modifiée.)

Cette façon présente les avantages suivants:

Pas de laid suffixe. Aucune erreur de syntaxe sur les anciens Ruby. Nous n’avons besoin que d’une ligne pour chaque fichier.

Plese, lisez ce sujet pour plus d’informations.

https://bugs.ruby-lang.org/issues/8976