Este es el rspec
binstub en mi directorio de proyectos.
#!/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")
¿Qué se pretende hacer con esto?
# frozen_string_literal: true
fuente
-"foo"
ser lo mismo que"foo".freeze
? Cuando verifico(-"foo").__id__
, obtengo un valor diferente cada vez, pero"foo".freeze.__id__
es el mismo cada vez. ¿Algunas ideas?-
es para deduplicar la cadena para ahorrar memoria, además de devolver una cadena congelada.Mejora el rendimiento de la aplicación al no asignar nuevo espacio para la misma cadena, lo que también ahorra tiempo para las tareas de recolección de basura. ¿Cómo? cuando congela un literal de cadena (objeto de cadena), le está diciendo a Ruby que no permita que ninguno de sus programas modifique el literal de cadena (objeto).
Algunas observaciones obvias a tener en cuenta.
1. Al congelar los literales de cadena, no está asignando nuevo espacio de memoria para ello.
Ejemplo:
Sin comentario mágico asigna nuevo espacio para la misma cadena (Observe las diferentes ID de objeto impresas)
Con un comentario mágico , ruby asigna espacio solo una vez
2. Al congelar los literales de cadena, su programa generará una excepción al intentar modificar el literal de cadena.
Ejemplo:
Sin comentarios mágicos , puede modificar los literales de cadena.
Con un comentario mágico , se generará una excepción cuando modifique literales de cadena
Siempre hay más para aprender y ser flexible:
fuente
En Ruby 3.0. Matz (el creador de Ruby) decidió hacer todos los literales de cadena congelados por defecto.
Puedes usar en Ruby 2.x. Simplemente agregue este comentario en la primera línea de sus archivos.
Por favor, lea este tema para obtener más información.
https://bugs.ruby-lang.org/issues/8976
fuente