Как я могу присвоить значение переменной void, используя множественное присваивание ruby?

Я хотел бы использовать множественное присваивание, но меня не волнует какая-то часть значений, которые я имею при вводе. Так есть ли способ присвоить что-то переменной void (иначе /dev/null из баш)? что-то вроде nil = 'I wont be used', У меня есть более конкретный пример того, чего я хочу достичь ниже.

Мой вклад:

['no','foo','nop','not at all','bar']

И я назначаю это так:

i,foo,dont,care,bar = ['no','foo','nop','not at all','bar']
#or with a splat :
dont,foo,*care,bar = ['no','foo','nop','not at all','bar']

Я хотел бы сделать что-то вроде этого:

nil,foo,*nil,bar = ['no','foo','nop','not at all','bar']

2 ответа

Решение
_, foo, *_, bar = ['no','foo','nop','not at all','bar']
foo #=> "foo"
bar #=> "bar"
_ #=> ["nop", "not at all"]

Вы также можете заменить *_ просто *,

Да, _ является совершенно допустимой локальной переменной.

Конечно, вам не нужно использовать _ для значений, которые вы не будете использовать. Например, вы могли бы написать

cat, foo, *dog, bar = ['no','foo','nop','not at all','bar']

С помощью _ может снизить вероятность ошибок, но в основном это говорит читателю, что вы не собираетесь использовать это значение. Некоторые предпочитают использовать имя переменной, которое начинается с подчеркивания для значений, которые не будут использоваться:

_key, value = [1, 2]

Если вы назначите меньшее количество переменных для элементов массива, элементы в конце массива будут отброшены. Например,

a, b = [1, 2, 3]
a #=> 1
b #=> 2

Вы также можете использовать values_at чтобы извлечь определенные элементы из массива:

ary = ['no','foo','nop','not at all','bar']

foo, bar = ary.values_at(1, -1)

foo #=> "foo"
bar #=> "bar"

Помимо индексов, он также принимает диапазоны:

ary.values_at(0, 2..3) #=> ["no", "nop", "not at all"]
Другие вопросы по тегам