在并行赋值中使用下划线作为变量

3
在下文中,变量_(下划线)是一个数组Arrayfoo == "foo",而且bar == "bar"
_, foo, bar = ["", "foo", "bar"]
_ # => ["", "foo", "bar"]

有人能解释一下下划线的作用以及在哪些情况下使用它是有用的吗?


IRB 中这个技巧不起作用。在 IRB 中下划线是最后一个被评估的变量,但在脚本中它是未使用的变量。这在 IRB 和脚本中的工作方式不同。 - Roman Kiselenko
@Monk_Code,这对我有效。 - Simone
@simone 请查看完整的评论。 - Roman Kiselenko
@Monk_Code 哦,好的,那很有道理。我不知道在 irb 中下划线有特殊含义! - Simone
3个回答

5

在并行赋值中,有时我们需要做两件事:

  • 忽略一个元素(使用_来处理)

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

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

a # => 1
b # => 3
c # => 5
  • 忽略多个元素(注意*的使用)

要忽略多个元素,请使用单个星号——我将其称为“裸星号”,没有更好的理由,只是因为听起来有点有趣:

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

a # => 1
b # => 5

阅读这篇博客文章Ruby中的解构赋值,了解更多其他相关内容。


2

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

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

那么不要对任何东西使用 ignored。更好的做法是使用 _


3
使用 ruby -w 运行脚本时,该脚本不会发出警告。 - steenslag

2

它只是像其他变量一样的变量。你可以使用quux或任何你喜欢的其他名称。

除了...你会收到有关未使用的本地变量quux的警告,而以_开头的变量的名称不会收到警告。这是一个惯例的编码,用_作为您想要忽略的变量的名称。


我之前并没有意识到的警告事项。谢谢。 - Arup Rakshit
你能看一下这个吗? - Arup Rakshit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接