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

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

提问人:Ulysse BN 提问时间:10/11/2016 更新时间:10/11/2016 访问量:113

问:

我想使用多个赋值,但我不关心输入中的某些值。那么有没有办法将某些东西分配给 void 变量(又名 bash)?类似 .我在下面有一个更具体的例子来说明我想要实现的目标。/dev/nullnil = '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']
ruby null variable-assignment assign 赋值运算符

评论

0赞 halfelf 10/11/2016
一个常见的替代方法是仅用作占位符 var。_

答:

3赞 Cary Swoveland 10/11/2016 #1
_, 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

评论

0赞 Cary Swoveland 10/11/2016
我的建议是尝试不同的表达方式,看看你会得到什么。基本规则是,如果可以得出结论,变量只有一个值赋值,那就没问题了。 是赋值不明确,导致 Ruby 引发异常的示例。*a, b, *c = [1,2,3,4,5]
0赞 Ulysse BN 10/11/2016
如果我写,我的 linter 会删除未使用的变量标志,或者即使我写了,是否有关于它的约定?__some_random_name
0赞 Cary Swoveland 10/11/2016
@UlysseBN,我不关注“林特”,但是,是的,有些人写.我编辑了我的答案来提及这一点。谢谢。_unused_key
0赞 Ulysse BN 10/11/2016
通过 linter 我提供了一些用于语法分析的工具(这是我用于 ruby 的工具)
4赞 Amadan 10/11/2016
“_(下划线)变量在何处以及如何指定?”:从 Ruby 2.0 开始,以下划线开头的变量具有特殊的处理方式,可以防止某些警告和错误与“我不关心这个值”语义一致(在此之前,只有它自己这样做)。例如,无效,但有效; 自 2.0 AFAIK 起有效。这不仅仅是 linter 的意见,linter 实际上遵循了 Ruby 的规则。_def x(a, a, c)def x(_, _, c)def x(_a, _a, c)
1赞 Stefan 10/11/2016 #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"]