【问题标题】:Skipping the first variable(s) when doing multiple assignment in Ruby在 Ruby 中进行多重赋值时跳过第一个变量
【发布时间】:2014-01-15 04:55:24
【问题描述】:

我知道我可以在 Ruby 的一行中拆分一个字符串并将不同的部分分配给不同的变量:

a, b, c, d = "this is a string".split
puts a # => "this"
puts b # => "is"
puts c # => "a"
puts d # => "string"

但是如果我不关心结果的前 x 部分,而只想将后面的部分保存到变量中怎么办?例如。在上面的例子中,如果我想将“a”和“string”保存到变量但不关心“this”和“is”怎么办?

我意识到我可以保持我的代码不变,并且永远不要使用变量ab,但这对我来说似乎很难看。 Ruby 有更优雅的方法吗?

【问题讨论】:

  • 使用你不关心的变量(例如_, _, c, d = ..)或调整输入(例如.. = "this is a string".split()[2,-1]
  • @user2864740,就是这样。请将其发布为答案。

标签: ruby split variable-assignment


【解决方案1】:

几种方法。

_, _, a, b = "this is a string".split

或者,

"this is a string".split[2, 3]

或者,真的,只是你想要的任何其他方式;他们都会做大致相同的事情,重要的是你想留给维护者的语义。

【讨论】:

  • 这不是和@user2864740 之前的评论中建议的一样吗?
  • 这两个都有效。我没有意识到您可以将参数传递给split。另外,我不喜欢“垃圾变量”选项,因为 vim 给了我一个“未使用的变量”警告,但事实证明它对 _ 没有这样做。完美!
  • @GeorgeMillo,为了清楚起见,这不是split 的“论据”,这是split @CarySwoveland 首先的结果的数组切片,有人留下评论不会排除在答案中包含该评论。其次,我也给他提供了另一种方式,并提到还有其他几种方式。
  • 您提出了与评论中完全相同的两种方法。您当然可以发表评论作为您的答案。问题是你是否应该这样做。
  • 哦不,请不要窃取他宝贵的互联网积分!但是是的@Bandrami,你是对的,我错过了那些是方括号而不是圆括号。
【解决方案2】:

您可以使用.slice 方法获取最后两个元素。

c, d  = "this is a string".split.slice(-2, 2)

【讨论】:

    【解决方案3】:

    我有一个稍微不同的情况,在我解析的字符串中,我关心“this”、“is”和“string”,而不关心“a”。虚拟变量方法有效,但我很好奇是否存在数组切片语法。 "this is a string".split[0, 1, 3] 没有(错误:参数太多)

    编辑:通过一点挖掘回答了我自己的问题。 "this is a string".split.values_at(0, 1, 3) 把它放在答案中,以防其他人需要这种樱桃采摘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2017-02-19
      • 2015-09-19
      • 2019-02-16
      • 2015-10-04
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多