Ruby的一元*运算符

时间:2012-02-28 22:03:29

标签: ruby splat

  

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

我在寻找一种简单的方法将数组转换为哈希时遇到了以下代码(类似于IEnumerable上的.Net的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

1 个答案:

答案 0 :(得分:4)

如果你想谷歌它,这是splat运营商。它确实将数组转换为列表(因此您可以使用数组作为方法的参数)。它也恰恰相反:它可以将一个列表“啜饮”成一个数组。

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