如何使用 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"]
我想使用多重赋值,但我不关心输入值的某些部分。那么有没有办法将一些东西分配给一个空变量(又名 /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"]