Ceci est une réimpression de Article de blog.
RubyKaigi Takeout 2020 Merci pour votre travail acharné. Cette fois, j'ai participé pour la première fois parce que c'était en ligne, mais c'était amusant de parler de contenu intéressant. En particulier, l'introduction de sandales de sawanobori et la livraison quotidienne du comité qui cuit le riz et fait griller le poisson sur un feu de joie semblaient redevenir normal. Non, quand il s'agit de committers Ruby, vous avez besoin de la technologie pour se développer dans un environnement difficile - ce sera une expérience d'apprentissage! Oh, et Refinements est une fonctionnalité très agréable et géniale, alors utilisons-la de plus en plus et devenons une nouvelle norme.
Au fait, la fièvre RubyKaigi ne s'est pas encore calmée, mais cette fois, c'était passionnant à Ruby Committers vs the World le premier jour Symbol # J'ai brièvement résumé l'histoire de to_s
.
Symbol # to_s
À peu près à la même époque l'année dernière, une proposition a été faite pour rendre la chaîne renvoyée par # to_s`` gelée
.
Avec ce ticket, le sujet principal "Faisons geler la valeur de retour de Symbol # to_s
" est sorti.
De plus, ce ticket contient une modification qui renvoie une chaîne figée non seulement pour Symbol # to_s
mais aussi pour les méthodes suivantes:
Module#name
TrueClass/FalseClass#to_s
NilClass#to_s
Veuillez vous référer aux liens suivants pour les relations publiques et le contexte.
Ce changement a été approuvé par M. Matsumoto et pré-publié en tant que "fonctionnalité expérimentale" dans Ruby 2.7 preview2 après la fusion.
Symbol # to_s
Je suis heureux que Symbol # to_s
renvoie maintenant une chaîne figée, ce qui améliore les performances.
J'aurais aimé l'avoir fait, mais après avoir fusionné les changements dans Symbol # to_s
, j'ai trouvé qu'il y avait un problème avec l'une des gemmes.
Par exemple, dans pry
, le code qui modifie la valeur de retour de Symbol # to_s
de manière destructive a été écrit comme suit, ce qui a eu un effet.
def method_missing(method, *args, &block)
meth = method.to_s
if meth.end_with?('?')
# to_Étant donné que la valeur de retour de s est modifiée de manière destructive, une erreur se produira s'il s'agit d'une chaîne figée ...
meth.chop!
present?(meth) || present?(meth.tr('_', '-'))
else
super
end
end
Certains codes ont été signalés qui perturbent la valeur de retour de Symbol # to_s
de cette manière, et Ruby 2.7 a également un support autour des arguments de mots-clés, donc pour éviter toute confusion, Symbol # in Ruby 2.7. La correspondance de to_s
a été reportée.
En outre, le seul changement qui a été annulé était le changement de Symbol # to_s
, et la méthode suivante a été modifiée pour renvoyer une chaîne figée et a été publiée en tant que fonctionnalité de Ruby 2.7.
Module#name
TrueClass/FalseClass#to_s
NilClass#to_s
Une extension de Ruby Committers vs the World de RubyKaigi Takeout 2020 tenue le mois dernier Il y avait juste une discussion sur Symbol # to_s
.
Il y a eu beaucoup de discussions sur ce qu'il faut faire avec Symbol # to_s
, mais une conclusion est qu'au lieu de rendre Symbol # to_s
incompatible, le flux consiste à ajouter une méthode avec un alias de Symbol # name
. J'ai fait.
Et ce jour-là, Symbol # name
a été fusionné dans la version de développement. Il y a un élan.
Symbol # to_s
et Module # name
NilClass # to_s
et TrueClass # to_s`` FalseClass # to_s
〜〜〜Symbol # name
qui renvoie une chaîne figée
d'ActiveSupport lance un PR qui appelle
Symbol # name`
〜〜〜Donc, j'ai brièvement résumé le problème Symbol # to_s
.
En regardant uniquement les résultats, il était incompatible avec une large gamme d'influence, mais c'est difficile dans une certaine mesure parce qu'il y a des problèmes que vous ne connaissez pas tant que vous ne l'avez pas réellement libéré.
Au contraire, dans ce cas, il s'est avéré qu'il y avait un problème avec la version préliminaire, on peut donc dire qu'elle fonctionnait correctement en tant que pré-version.
Je suis content de l'avoir su avant que cela ne devienne un problème dans la version officielle.
Lorsque la version préliminaire de Ruby 3.0 sortira, essayons-la et voyons s'il y a des problèmes.