在Ruby中进行多重赋值时跳过第一个变量

3
我知道在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有更优雅的方法吗?


5
使用一个你不关心的变量(例如 _, _, c, d = ..)或调整输入(例如 .. = "this is a string".split()[2,-1] - user2864740
1
@user2864740,这就是正确的做法。请将其发布为答案。 - Cary Swoveland
3个回答

8
有几种方法。
_, _, a, b = "this is a string".split

或者,

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

或者说,你可以按照自己想要的任何方式进行操作;它们都能实现大致相同的功能,重要的是你希望为维护者留下的语义。


1
这不是与@user2864740早期评论中建议的相同吗? - Cary Swoveland
这两个都可以工作。我没有意识到你可以传递参数给 split。此外,我不喜欢“垃圾变量”选项,因为vim会给我一个“未使用的变量”警告,但事实证明它对 _ 不会这样做。完美! - GMA
你提出了与评论中完全相同的两种方法。当然,你可以将评论作为你的答案呈现。问题是你是否应该这样做。 - Cary Swoveland
哦不,别偷他宝贵的网络积分!但是@Bandrami你说得对,我错过了那些是方括号而不是圆括号。 - GMA
还有许多用户(包括我)不太会阅读评论,他们会回答未被回复的问题。 - Bandrami
显示剩余2条评论

1
您可以使用.slice方法获取最后2个元素。
c, d  = "this is a string".split.slice(-2, 2)

0

我有一个稍微不同的情况,我在解析的字符串中关心“this”,“is”和“string”,但不关心“a”。虚拟变量方法可行,但我想知道是否有一种数组切片语法可以实现。"this is a string".split[0, 1, 3]没有(错误:参数太多)

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


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