Как предотвратить объединение массивов от изменения значений задействованных массивов?

Я хочу создать некоторые константы, которые являются значениями массива, но, кажется, возникают проблемы, когда я пытаюсь их объединить.

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"]

Обратите внимание, что после concat, MALE_TOKENS теперь содержит FEMALE_TOKENS, Я не хочу этого

Как мне держать вещи отдельно?

1 ответ

Решение

Массив #concat мутирует получателя:

Добавляет элементы +other_ary+s к self,

Чтобы не изменить MALE_TOKENS значение, которое вы можете использовать Array #+:

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

MALE_TOKENS
#=> ["m", "male"]
FEMALE_TOKENS
#=> ["f", "w", "female"]
Другие вопросы по тегам