2009-11-13 51 views

回答

60

这是splat operator。您经常会看到它用于将数组拆分为函数的参数。

def my_function(param1, param2, param3) 
    param1 + param2 + param3 
end 

my_values = [2, 3, 5] 

my_function(*my_values) # returns 10 

更常见的是用它来接受参数的任意数量的

def my_other_function(to_add, *other_args) 
    other_args.map { |arg| arg + to_add } 
end 

my_other_function(1, 6, 7, 8) # returns [7, 8, 9] 

它也适用于多任务(虽然这两个语句将工作没有图示):

first, second, third = *my_values 
*my_new_array = 7, 11, 13 

对于您的示例,这两个将是等效的:

p *1..10 
p 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
+1

我在我看来,a,b,c = * myvalues 等于a,b,c = myvalues 或者在本例中隐式使用splat运算符是ruby? – 2009-11-13 15:21:17

+0

@帕特里克是的,在一边有一个对象而另一边有多个对象的情况下,分配将意味着一个图示操作符。所以这不是一个非常有用的例子,我想。 – Neall 2009-11-13 15:44:08