【问题标题】:Ruby's Unary * Operator [duplicate]Ruby的一元*运算符[重复]
【发布时间】:2012-03-18 10:15:33
【问题描述】:

可能重复:
What is the * operator doing to this string in Ruby

在寻找将数组转换为哈希的简单方法时,我遇到了以下代码(类似于 .Net 在 IEnumerable 上的 ToDictionary 方法...我希望能够任意设置键和值)。

a = [ 1, 2, 3, 4, 5, 6 ]
h = Hash[ *a.collect { |v| [ v, v ] }.flatten ]

我的问题是,a.collect 之前的星号有什么作用?

对了,代码来自http://justatheory.com/computers/programming/ruby/array_to_hash_one_liner.html

【问题讨论】:

  • 啊,还没找到那个。星号很难搜索,因为 google 和 SO 会将其从搜索中过滤掉。
  • 好吧,现在你知道它叫“splat”了。 :-)
  • 感谢@JoshLee 的帮助。
  • Symbol Hound 搜索引擎专门搜索符号:ruby *
  • 谢谢@sarnold,我以前从未听说过符号猎犬。以后一定要记住。

标签: ruby splat


【解决方案1】:

如果你想用谷歌搜索它,那就是 splat-operator。它确实将数组转换为列表(因此您可以将数组用作方法的参数)。它也做相反的事情:它可以将一个列表“啜”成一个数组。

require 'date'
*date_stuff = 2012,2,29 # slurp
p date_stuff #=> [2012, 2, 29]
Date.new(*date_stuff) # regurgitate

【讨论】:

  • 感谢您提供有关相反行为的奖励信息。
  • 一般编程中a, b = *[:one, :two]不叫元组吗?
  • @fanoy - 我对一般编程中的元组一无所知。您的代码有效;它甚至可以在没有 splat 的情况下工作(这有点奇怪)。
  • 第一个示例中不需要 splat; Ruby 允许您在定义数组时省略括号。你可能想要first, *middle, last = 1,2,3,4,5; p middle #=> [2, 3, 4]
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
相关资源
最近更新 更多