La version de développement de Ruby 3.0 a une fonction qui permet une attribution fractionnée par attribution de droits.

Réimprimé à partir de Article de blog.

Il est entré. À l'origine, Ruby 2.7 incluait expérimentalement une fonction qui permet l'affectation de fractionnement en utilisant une ligne de correspondance de modèle.

# Ruby 2.Code qui fonctionne avec 7
p RUBY_DESCRIPTION
# => "ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]"

data = { name: "homu", age: 14 }

#J'ai pu effectuer une affectation fractionnée en utilisant une ligne dans
data in { name:, age: }
p name  # => "homu"
p age   # => 14

Cependant, lorsque la correspondance de modèles a été officiellement introduite dans Ruby 3.0, une ligne était programmée pour être supprimée une fois.

J'ai trouvé dommage que l'affectation fractionnée ait été supprimée parce que je la voulais car c'est une fonction très pratique, mais au lieu de supprimer une ligne, l'affectation fractionnée a été implémentée par affectation correcte dans Ruby 3.0. Cela permet d'effectuer une affectation fractionnée avec une affectation correcte, comme cela a été fait avec une ligne.

p RUBY_DESCRIPTION
# => "ruby 3.0.0dev (2020-10-26T09:00:24Z master 52c630da00) [x86_64-linux]"

data = { name: "homu", age: 14 }
data => { name:, age: }
p name  # => "homu"
p age   # => 14

À propos, cela s'appelle l'affectation fractionnée, mais comme il s'agit d'une fonction de capture de variable pour la correspondance de modèles, elle peut également être utilisée comme suit.

data = { name: "homu", age: 14 }

#Seule une partie peut être attribuée
data => { age: }
p age   # => 14

#Peut également être capturé avec Struct
data = Struct.new(:name, :age).new("mami", 15)
data => { name: }
p name  # => "mami"

#Lever NoMatchingPatternError se produit s'il n'y a pas de correspondance
data => { name: Integer }

À l'origine, je voulais utiliser une ligne dans comme expression conditionnelle pour ʻif`, mais à la fin, elle est devenue inutilisable dans ce but, et au contraire, elle est devenue une fonction avec une signification légèrement différente appelée affectation fractionnée. En le mettant en œuvre avec une bonne affectation, il a un sens différent et devient une fonction, et je pense personnellement qu'il s'est considérablement amélioré. Au contraire, je veux que la fonction puisse utiliser «true / false» afin qu'elle puisse être utilisée dans des expressions conditionnelles sur une ligne. Pour le moment, vous pouvez désormais utiliser la bonne substitution! !! Au fait, l'affectation de gauche sera-t-elle dans le sens d'une affectation fractionnée?

Recommended Posts

La version de développement de Ruby 3.0 a une fonction qui permet une attribution fractionnée par attribution de droits.
Ruby 2.7.2 a été publié et les avertissements obsolètes ne seront plus émis par défaut
J'ai essayé un puzzle qui ne peut être résolu que par les 10% de mauvais ingénieurs
La version de Ruby installée par défaut sur le Mac a été référencée, pas de rbenv