Как я могу присвоить значение переменной 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"]