如何使用 ruby 的多重赋值给 void 变量赋值?

How can I assign a value to a void variable using ruby’s multiple assignment?

我想使用多重赋值,但我不关心输入值的某些部分。那么有没有办法将一些东西分配给一个空变量(又名 /dev/null from bash)?类似于 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']
_, 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']

使用_可能会减少出错的机会,但主要是为了告诉reader您不会使用该值。对于不会使用的值,有些人更喜欢使用以下划线开头的变量名:

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