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

时间:2016-10-11 05:03:57

标签: ruby null variable-assignment assign assignment-operator

我想使用多个赋值,但我不关心输入中的某些值。那么有没有办法将一些东西分配给一个void变量(又来自bash的<ol>)?像/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']

2 个答案:

答案 0 :(得分:3)

_, 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

答案 1 :(得分:1)

您还可以使用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"]