62 votes

est-il juste d'attribuer plusieurs variables comme celle-ci a = b = c = d = 5 en ruby?

 a = b = c = d = 5

puts (a) >> 5
puts (b) >> 5
puts (b) >> 5
puts (b) >> 5
a= a+1
puts (a) >> 6
puts (b) >> 5
 

J'ai trouvé qu'il n'y a pas de problème avec la valeur d'attribution comme celle-ci. Ma question est de savoir si on assigner comme celle donnée ci-dessus ou

 a , b, c, d = 5, 5, 5, 5
 

113voto

glenn mcdonald Points 8933

Ce qu'il faut savoir, c'est que votre cas ne fonctionne que bien car les chiffres sont immuables en Ruby. Vous ne voulez pas faire cela avec des chaînes, des tableaux, des hachages ou à peu près autre chose que des nombres, car cela créerait plusieurs références au même objet, ce qui n'est certainement pas ce que vous voulez:

 a = b = c = d = "test"
b << "x"
=> "testx"
a
=> "testx"
 

Attendu que la forme parallèle est sûre avec tous les types:

 a,b,c,d = "test","test","test","test"
=> ["test", "test", "test", "test"]
b << "x"
=> "testx"
a
=> "test"
 

9voto

Firas Assaad Points 10339

Il n’ya rien de mal à l’assigner de cette façon ( a = b = c = d = 5 ). Personnellement, je le préfère à plusieurs affectations si toutes les variables doivent avoir la même valeur.

Voici un autre moyen:

 a, b, c, d = [5] * 4
 

7voto

Mike Woodhouse Points 27748

Si il se sent bien, le faire.

La langue, il permet, comme vous l'avez découvert, et il se comporte comme vous le souhaitez. Je proposerais que la seule question que vous devez vous poser ce qui concerne l'expressivité: le code est-il de vous dire quel est son but?

Personnellement, je n'aime pas particulièrement l'aide de cette construction pour beaucoup plus que de l'initialisation des valeurs par défaut, de préférence égal à zéro. Idéalement, les variables initialisées seraient tous ont un objectif similaire ainsi, les compteurs, par exemple. Mais si j'avais plus d'un couple de même dessein variables, je pourrais très bien envisager de déclarer à être une forme de double, pour être reconstruit dans, par exemple, une table de Hachage.

4voto

Igor Krivokon Points 6999

Ces deux initialisations express sens différent. L' a = b = c = d = 5 signifie "toutes mes variables doit être initialisée à la même valeur, et cette valeur est de 5". L'autre, en a, b, c, d = 5, 5, 5, 5, signifie "j'ai une liste de variables, et correspondant de la liste d'initialisation des valeurs".

Est votre logique à ce que toutes les variables doivent toujours être les mêmes? Le premier est mieux. Si pas, le second peut-être mieux. Une autre question: est-ce votre liste de 4 variables globale? est-il probable que vous ajoutez ou retirez une autre variable à ce groupe? Si si, je vous suggère encore une autre variante de la place:

a = 5
b = 5
c = 5
d = 5

3voto

Kibet Yegon Points 921

Je me suis une fois mordu avec celui-là. Cela peut vous faire économiser quelques frappes aujourd’hui mais vous en prie plus tard. Comme @glenn l'a mentionné, il crée plusieurs références au même objet.

Exemple: Ceci s'applique aux rubis 1.8 et 1.9

 > a = b = Array.new
=> []
> a.object_id == b.object_id
=> true
> a << 1
=> [1]
> b << 2
=> [1, 2]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X