2017-05-05 2 views
0

Je veux créer des constantes qui sont des valeurs de tableau, mais qui semblent avoir un problème lorsque j'essaie de les concaténer.Comment empêcher la concaténation de tableau de modifier les valeurs des tableaux impliqués?

MALE_TOKENS = %w(m male) 
#=> ["m", "male"] 
FEMALE_TOKENS = %w(f w female) 
#=> ["f", "w", "female"] 
GENDER_TOKENS = MALE_TOKENS.concat FEMALE_TOKENS 
#=> ["m", "male", "f", "w", "female"] 
MALE_TOKENS 
#=> ["m", "male", "f", "w", "female"] 

Notez que après la concat enation, le MALE_TOKENS contient maintenant FEMALE_TOKENS. Je ne veux pas ça.

Comment garder les choses séparées?

+3

Pourquoi ne pas utiliser '' +? – orde

+0

Je suggère juste un tag ici: 'ruby'. Je ne vois personne chercher sur l'un des autres tags. –

+0

Je ne le conseillerais pas, mais vous pourriez écrire '[] .concat (a) .concat (b)', ce qui ne modifierait pas 'a' ou' b'. –

Répondre

3

Array#concat mute le récepteur:

ajoute les éléments de + other_ary + s à self.

Pour ne pas changer la valeur MALE_TOKENS vous pouvez utiliser Array#+:

GENDER_TOKENS = MALE_TOKENS + FEMALE_TOKENS 
#=> ["m", "male", "f", "w", "female"] 

MALE_TOKENS 
#=> ["m", "male"] 
FEMALE_TOKENS 
#=> ["f", "w", "female"]