在并行分配中使用下划线作为变量

时间:2014-02-22 18:11:46

标签: ruby irb

在下文中,变量_(下划线)是Arrayfoo == "foo"bar == "bar"

_, foo, bar = ["", "foo", "bar"]
_ # => ["", "foo", "bar"]

有人可以解释下划线的作用以及使用它的用途吗?

3 个答案:

答案 0 :(得分:4)

在并行分配中,我们有时会做两件事:

  • 忽略一个元素(照顾_

您可以重复使用下划线来表示您不关心的任何元素:

a, _, b, _, c = [1, 2, 3, 4, 5]

a # => 1
b # => 3
c # => 5
  • 忽略多个元素(照顾*

要忽略多个元素,请使用单个星号 - 我将其称为'裸露的splat',因为它听起来有点不好用:

a, *, b = [1, 2, 3, 4, 5]

a # => 1
b # => 5

阅读此博文Destructuring assignment in Ruby以了解更多其他相关内容。

答案 1 :(得分:2)

Underscore只是您在那里进行的变量赋值的占位符。在你的情况下,它基本上意味着忽略数组中的第一个值。如果我们没有它,你会做这样的事情:

ignored, foo, bar = ["", "foo", "bar"]
=> ["", "foo", "bar"]

然后不要忽略任何事情。使用_

更好

答案 2 :(得分:2)

它只是一个变量,与其他变量一样。您可以使用quux或其他任何您喜欢的名称。

除了......您将收到有关名为quux的未使用的局部变量的警告,而名称以_开头的变量不会收到警告。这是一种约定的编码,使用_作为您要忽略的变量的名称。